@cqa-lib/cqa-ui 1.1.20 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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/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/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/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/templates/table-template.component.ts","../../../src/lib/templates/table-template.component.html","../../../src/lib/utils/tw-overlay-container.ts","../../../src/lib/execution-screen/step-registry.token.ts","../../../src/lib/execution-screen/base-step.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/basic-step/basic-step.component.ts","../../../src/lib/execution-screen/basic-step/basic-step.component.html","../../../src/lib/execution-screen/step-renderer/step-renderer.component.ts","../../../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/visual-comparison/visual-comparison.component.ts","../../../src/lib/execution-screen/visual-comparison/visual-comparison.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/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/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/visual-difference-modal/visual-difference-modal.component.ts","../../../src/lib/visual-difference-modal/visual-difference-modal.component.html","../../../src/lib/configuration-card/configuration-card.component.ts","../../../src/lib/configuration-card/configuration-card.component.html","../../../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/custom-input/custom-input.component.ts","../../../src/lib/custom-input/custom-input.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/ui-kit.module.ts","../../../src/lib/dialog/dialog-ref.ts","../../../src/lib/dialog/dialog.tokens.ts","../../../src/lib/dialog/dialog.service.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 @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 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.disabled) {\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\n if (this.variant === 'filled') {\n if (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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.disabled) {\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.disabled) {\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.disabled) {\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.disabled) {\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.disabled) {\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\" style=\"pointer-events: none;\">\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]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n >\n\n <mat-icon *ngIf=\"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=\"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 AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\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\ntype SegmentOption = {\n label: string;\n value: string;\n disabled?: boolean;\n icon?: string;\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\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: inline-block;\">\n <div\n #segmentContainer\n class=\"cqa-relative cqa-inline-flex cqa-flex-row cqa-items-start cqa-p-[3.5px] cqa-h-[31.5px] cqa-bg-surface-light cqa-rounded-[8px]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || 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-10 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px] 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 cqa-flex-none\"\n [ngClass]=\"{\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 }\" [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 </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 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 [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\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 (this.componentRef && changes['componentConfig'] && this.componentConfig) {\n // Update component inputs if config changed\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 // Use detectChanges to ensure styles are updated immediately\n this.componentRef.changeDetectorRef.detectChanges();\n this.cdr.detectChanges();\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 // Mark for change detection - use detectChanges to ensure styles are applied\n this.componentRef.changeDetectorRef.detectChanges();\n this.cdr.detectChanges();\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 { DynamicCellTemplateDirective, DynamicHeaderTemplateDirective } from \"./dynamic-cell.directive\";\nimport { ComponentRenderConfig } from \"./component-render-config.interface\";\n\nexport { ComponentRenderConfig } from \"./component-render-config.interface\";\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 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 styleUrls: [],\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 // 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 @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 // 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 // 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 this.computedColumnWidths = cols.map(c => {\n if (c.fixedPx && c.fixedPx > 0) {\n return `${c.fixedPx}px`;\n }\n const share = (c.weight || 1) / totalWeight;\n return `calc((100% - ${fixedPx}px) * ${share.toFixed(4)})`;\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 get allSelected(): boolean {\n const rows = this.data || [];\n if (!rows.length) return false;\n return rows.every(r => !!r?.isSelected);\n }\n\n get someSelected(): boolean {\n const rows = this.data || [];\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 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 = checked;\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\" [class.is-loading]=\"true\" *ngIf=\"!showTableLoading\">\n <colgroup>\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 <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 [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 <tr class=\"table-row cqa-bg-surface-default hover:cqa-bg-surface-hover\" *ngFor=\"let row of computedData; let rowIndex = index; trackBy: trackByIndex\"\n [class.selected]=\"row?.isSelected\">\n <ng-container *ngFor=\"let col of visibleColumns; trackBy: trackByIndex\">\n <td class=\"cell cqa-px-[10.5px] cqa-py-[11px]\" \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 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 (change)=\"onRowSelectChange($event, row)\" />\n <label\n class=\"custom-checkbox-label\"\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 } 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\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\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 togglePageSizeMenu(): void {\n this.pageSizeOpen = !this.pageSizeOpen;\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\">\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-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]=\"'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]\">\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}\n\nexport interface DynamicSelectFieldConfig {\n key: string;\n label?: string;\n placeholder?: string;\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 /** 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}\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 @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\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 /**\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 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) {\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 };\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.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) {\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' : ''}`.trim();\n }\n\n get isMultiple(): boolean {\n return this.toBoolean(this.config?.multiple);\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 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 if (this.hasExistingValue(currentValue)) {\n return;\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 optionId = opt.id ?? opt.value;\n if (this.isMultiple) {\n if (!Array.isArray(controlValue)) return false;\n return controlValue.includes(optionId);\n }\n return controlValue === optionId;\n }\n\n private getAllOptionIds(): any[] {\n const options = this.config?.options || [];\n return options.map(o => (o.id ?? o.value)).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 // 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 loadingMore when closing\n this.loadingMore = 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 // Optional: only trigger initial fetch on open when explicitly requested.\n if (this.config?.serverSearch && this.toBoolean(this.config?.initialFetchOnOpen)) {\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 // 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\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 * 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 idOf = (o: SelectOption) => (o.id ?? o.value);\n const selectedOptions = allOptions.filter(o => selectedIds.includes(idOf(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 id = idOf(o);\n if (id === undefined) continue;\n if (!seen.has(id)) {\n seen.add(id);\n merged.push(o);\n }\n }\n for (const o of baseFiltered) {\n const id = idOf(o);\n if (id === undefined) continue;\n if (!seen.has(id)) {\n seen.add(id);\n merged.push(o);\n }\n }\n return merged;\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 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 // If click is inside any open mat-select panel, ignore\n const panelEls = Array.from(document.querySelectorAll('.mat-select-panel')) as HTMLElement[];\n const clickInsidePanel = panelEls.some((el) => el.contains(target));\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 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 // Request more only if not currently loading and hasMore still true\n if (this.hasScrolledSinceOpen && !this.loadingMore && this.config?.hasMore) {\n this.loadingMore = true;\n const key = this.config?.key || '';\n const q = this.searchTextByKey[key] || '';\n // Emit outputs and invoke optional callbacks\n this.loadMore.emit({ key, query: q });\n try { this.config.onLoadMore?.(q); } catch {}\n }\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\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\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)=\"$event.stopPropagation()\" (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 [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\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 class=\"cqa-min-w-0\" *ngIf=\"hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n <span class=\"cqa-min-w-0\" *ngIf=\"!hasHighlighting\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n <span *ngIf=\"hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n <span *ngIf=\"!hasHighlighting\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </ng-template>\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</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, Output, SimpleChanges, ViewChildren, QueryList } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\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 {\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\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 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 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.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 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()\">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()\">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()\">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}\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 @Output() actionClick = new EventEmitter<{ id: string; selected: any[] }>();\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 onAction(action: TableAction): void {\n if (this.isDisabled(action)) {\n return;\n }\n const context = { id: action.id, selected: this.selectedItems || [] };\n if (action.onClick) {\n action.onClick(context);\n }\n this.actionClick.emit(context);\n }\n}\n\n\n","<div class=\"cqa-ui-root\">\n <div\n class=\"action-toolbar cqa-flex cqa-items-center 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]\"\n *ngIf=\"hasSelection\">\n <div class=\"action-toolbar-left cqa-text-[14px] cqa-leading-[21px] cqa-font-medium\">\n {{ selectionLabel }}\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)\" (click)=\"!isDisabled(action) && onAction(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\">\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 </div>\n <!-- Forwards clicks inside toolbar without affecting outer selections -->\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 md:cqa-h-[63px] 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-min-h-[53px] 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] md:cqa-h-[61px] 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\"\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} 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}\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 }\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, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.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() workspaceMultiple: boolean = false;\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() workspaceOptionStyle: 'checkmark' | 'checkbox' = 'checkbox';\n @Input() workspaceShowSelectAll: boolean = false;\n @Input() workspaceCloseOnSelect: boolean = false;\n @Input() workspaceOnSearch?: (query: string) => void;\n @Input() workspaceOnLoadMore?: (query?: string) => void;\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(): DynamicSelectFieldConfig {\n return {\n key: 'workspace',\n placeholder: this.workspacePlaceholder,\n disabled: this.workspaceDisabled,\n multiple: this.workspaceMultiple,\n searchable: this.workspaceSearchable,\n serverSearch: this.workspaceServerSearch,\n hasMore: this.workspaceHasMore,\n isLoading: this.workspaceIsLoading,\n optionStyle: this.workspaceOptionStyle,\n showSelectAll: this.workspaceShowSelectAll,\n closeOnSelect: this.workspaceCloseOnSelect,\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 const normalized = this.workspaceMultiple\n ? Array.isArray(val) ? val : (val != null ? [val] : [])\n : (Array.isArray(val) ? (val.length ? val[0] : undefined) : val);\n ctrl.setValue(normalized, { emitEvent: false });\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-dynamic-select [form]=\"workspaceForm\" [config]=\"workspaceConfig\" (selectClick)=\"workspaceSelectClick.emit()\">\n </cqa-dynamic-select>\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 {\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\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\n /** Internal generation state */\n isGenerating: boolean = false;\n isGenerated: boolean = false;\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 for ~12 seconds\n this.isGenerated = false;\n this.isGenerating = true;\n\n // Clear any existing timer defensively\n \n setTimeout(() => {\n this.isGenerating = false;\n this.isGenerated = true;\n }, 200);\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 cqa-cursor-pointer\">\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 cqa-cursor-pointer\">\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 @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 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 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 [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)\" 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 /** 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 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\">\n <div class=\"cqa-w-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 [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 tags\"\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 </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 { 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\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 [matTooltip]=\"chip.hasMore ? chip.fullText : ''\"\n [matTooltipDisabled]=\"!chip.hasMore\"\n matTooltipPosition=\"above\">\n <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-medium cqa-text-primary\">{{ chip.label || chip.key\n }}:</span>\n <span class=\"cqa-text-[12px] cqa-leading-[16px]\">{{ 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 (click)=\"removeChip.emit(chip)\" 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\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 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 \n // Only apply white text class if custom icon color is not provided\n if (!this.iconColor) {\n return [...baseClasses, 'cqa-text-white'].join(' ');\n }\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\" style=\"display: inline-block;\">\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 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 {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n SimpleChanges,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { DynamicFilterItem } 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\n // Search bar outputs\n @Output() onSearchChange = new EventEmitter<string>();\n\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() showFilterPanel: boolean = false;\n @Input() showFilterButton: boolean = true;\n\n // Other button input\n @Input() otherButtonLabel: string = 'Other Button';\n @Input() otherButtonVariant: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' | 'grey-solid' = 'filled';\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 // 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() selectedAutoRefreshInterval: number = 0;\n @Input() pageIndex: number = 0;\n @Input() pageSize: number = 10;\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 // 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 // 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\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 // Internal column visibility state\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 }\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 return;\n }\n\n this.filteredRows = [...this.data];\n this.applyPagination();\n this.initializeColumnVisibility();\n this.updateComputedColumns();\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 // Initialize visibility state for all visibility columns (default to true)\n for (const col of this._cachedVisibilityColumns) {\n if (this._columnVisibility[col.id] === undefined) {\n this._columnVisibility[col.id] = true;\n }\n }\n }\n\n get anyRowSelected(): boolean {\n return !!(this.pagedRows && this.pagedRows.some(r => !!(r as any).isSelected));\n }\n\n get currentSelectedItems(): any[] {\n return (this.pagedRows || []).filter(r => !!(r as any).isSelected);\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 }\n\n onAutoRefreshChange(intervalMs: number): void {\n this.selectedAutoRefreshInterval = intervalMs;\n this.setupAutoRefresh(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 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 let text = '';\n if (Array.isArray(value)) {\n text = value.map((v: any) => (v?.name ?? v?.label ?? v?.value ?? 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 = (value?.name ?? value?.label ?? value?.value ?? JSON.stringify(value));\n }\n } else {\n text = String(value);\n }\n chips.push({ key, 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 }\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","<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=\"showFilterButton\"\n variant=\"grey-solid\"\n icon=\"add\"\n [text]=\"'Filter'\"\n (clicked)=\"toggleFilter()\"\n >\n <span>Filter</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 <cqa-button *ngIf=\"showOtherButton\" [variant]=\"otherButtonVariant\" [text]=\"otherButtonLabel\"></cqa-button>\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 [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\">\n <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n <app-dynamic-table\n [columns]=\"computedColumns\"\n [data]=\"pagedRows\"\n [isTableLoading]=\"isTableLoading\"\n [isTableDataLoading]=\"isTableDataLoading\">\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 [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]=\"currentSelectedItems\"\n [actions]=\"actions\"\n (actionClick)=\"actionClick($event)\"\n ></cqa-table-action-toolbar>\n </div>\n \n </div>\n</div>\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('ctc-select-panel') ||\n pane.classList.contains('ctc-date-range-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 const hasLibraryDatePickerInside = pane.querySelector('.ctc-date-range-panel') !== null;\n \n const isLibraryOverlay = paneHasLibraryClass || hasLibraryDialogInside || \n hasLibrarySelectInside || hasLibraryDatePickerInside;\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","import { InjectionToken, Type } from '@angular/core';\n\nexport const STEP_COMPONENT_MAP = new InjectionToken<Map<string, Type<any>>>('STEP_COMPONENT_MAP');\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 return `${seconds.toFixed(1)}s`;\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { SelfHealAnalysisData, SelfHealAction } 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 {\n // Individual inputs\n @Input() originalLocator!: string;\n @Input() healedLocator!: string;\n @Input() confidence!: number; // 0-100\n @Input() healMethod!: string; // e.g., \"Semantic Attribute Matching\"\n\n @Output() action = new EventEmitter<SelfHealAction>();\n\n // Data property built from individual inputs\n data!: SelfHealAnalysisData;\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 }\n\n onAccept(): void {\n this.action.emit('accept');\n }\n\n onReject(): void {\n this.action.emit('reject');\n }\n\n onModifyAccept(): void {\n this.action.emit('modify-accept');\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-[10px] 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]\">\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 [value]=\"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]\">Original 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 [value]=\"data.healedLocator\" \n readonly\n class=\"cqa-w-full cqa-py-1 cqa-px-3 !cqa-border !cqa-border-solid !cqa-border-[#A7F3D0] cqa-rounded !cqa-bg-white cqa-text-[8px] cqa-leading-[12px] cqa-text-[#047857]\"\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 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 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 Accept\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 (click)=\"onModifyAccept()\"\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 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 Modify & Accept\n </button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BasicStepConfig, SelfHealAction, SubStep, StepStatus, TimingBreakdown, SelfHealAnalysisData } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-basic-step',\n templateUrl: './basic-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class BasicStepComponent extends BaseStepComponent implements OnInit {\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() subSteps!: SubStep[];\n @Input() selfHealAnalysis?: SelfHealAnalysisData;\n @Input() selfHealed?: boolean;\n @Input() selfHealDuration?: number;\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: BasicStepConfig;\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 type: 'basic',\n subSteps: this.subSteps || [],\n selfHealAnalysis: this.selfHealAnalysis,\n selfHealed: this.selfHealed,\n selfHealDuration: this.selfHealDuration,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as BasicStepConfig;\n\n super.ngOnInit();\n }\n\n get hasSubSteps(): boolean {\n return this.subSteps && this.subSteps.length > 0;\n }\n\n onSelfHealAction(action: SelfHealAction): void {\n switch (action) {\n case 'accept':\n this.onAccept();\n break;\n case 'reject':\n this.onReject();\n break;\n case 'modify-accept':\n this.onModifyAccept();\n break;\n }\n }\n\n onAccept(): void {\n console.log('Accept action clicked');\n }\n\n onReject(): void {\n console.log('Reject action clicked');\n }\n\n onModifyAccept(): void {\n console.log('Modify & Accept action clicked');\n }\n}\n","<div>\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 \n <!-- Status Icon -->\n <!-- {{ getStatusIcon(config.status) }} -->\n <div><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\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(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 && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <div\n *ngFor=\"let subStep of 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 <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n [ngClass]=\"getStatusColorClass(subStep.status)\">\n {{ getStatusIcon(subStep.status) }}\n </mat-icon> -->\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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\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\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\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</div>\n","import { Component, Input, ViewChild, ViewContainerRef, OnChanges, SimpleChanges, Type, AfterViewInit, Inject } from '@angular/core';\nimport { ExecutionStepConfig } 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 {\n @Input() step!: ExecutionStepConfig;\n @ViewChild('container', { read: ViewContainerRef }) container!: ViewContainerRef;\n\n constructor(\n @Inject(STEP_COMPONENT_MAP) private componentMap: Map<string, Type<any>>\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['step'] && this.container) {\n this.loadComponent();\n }\n }\n\n ngAfterViewInit(): void {\n this.loadComponent();\n }\n\n private loadComponent() {\n if (!this.container || !this.step) return;\n \n this.container.clear();\n const componentType = this.componentMap.get(this.step.type);\n \n if (componentType) {\n const componentRef = this.container.createComponent(componentType);\n const instance = componentRef.instance;\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 \n // Also set config for backward compatibility with components that still use config input\n if ('config' in instance) {\n (instance as any).config = this.step;\n }\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { StepGroupConfig, ExecutionStepConfig, StepStatus, TimingBreakdown } 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 styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class StepGroupComponent extends BaseStepComponent implements OnInit {\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() groupName!: string;\n @Input() steps!: ExecutionStepConfig[];\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 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 type: 'step-group',\n groupName: this.groupName,\n steps: this.steps,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as StepGroupConfig;\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\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 }\n }\n}\n","<div class=\"cqa-p-2\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"config.status === '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 === '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 === '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 === '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 </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-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Step group: {{ config.groupName }}\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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\">\n <cqa-step-renderer *ngFor=\"let step of config.steps\" [step]=\"step\"></cqa-step-renderer>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { LoopStepConfig, LoopIteration, ExecutionStepConfig, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-loop-step',\n templateUrl: './loop-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class LoopStepComponent extends BaseStepComponent implements OnInit {\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() loopType?: 'for' | 'while';\n @Input() iterations!: LoopIteration[];\n @Input() selectedIterationId?: string;\n @Input() defaultIteration?: 'first' | 'last';\n @Input() nestedSteps?: ExecutionStepConfig[];\n @Input() showViewAllIterations?: boolean;\n\n // Output event for when the loop step expands\n @Output() onExpand = new EventEmitter<void>();\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: LoopStepConfig;\n\n selectedIteration: LoopIteration | null = null;\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 type: 'loop',\n loopType: this.loopType,\n iterations: this.iterations,\n selectedIterationId: this.selectedIterationId,\n defaultIteration: this.defaultIteration,\n nestedSteps: this.nestedSteps,\n showViewAllIterations: this.showViewAllIterations,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as LoopStepConfig;\n\n super.ngOnInit();\n this.selectDefaultIteration();\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 }\n }\n\n selectDefaultIteration(): void {\n if (this.selectedIterationId) {\n this.selectedIteration = this.iterations.find(\n iter => iter.id === this.selectedIterationId\n ) || null;\n } else if (this.defaultIteration === 'last' && this.iterations.length > 0) {\n this.selectedIteration = this.iterations[this.iterations.length - 1];\n } else if (this.iterations.length > 0) {\n this.selectedIteration = this.iterations[0];\n }\n }\n\n onIterationChange(iterationId: string): void {\n this.selectedIteration = this.iterations.find(iter => iter.id === iterationId) || null;\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","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"config.status === '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 === '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 === '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 === '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 </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\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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]\">\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\" 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 [value]=\"selectedIteration?.id\"\n (change)=\"onIterationChange($any($event.target).value)\">\n <option *ngFor=\"let iteration of config.iterations\" [value]=\"iteration.id\">\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\">\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 <div\n *ngFor=\"let subStep of selectedIteration.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><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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\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\n <!-- Nested Steps -->\n <div *ngIf=\"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 <cqa-step-renderer *ngFor=\"let step of config.nestedSteps\" [step]=\"step\"></cqa-step-renderer>\n </div>\n </div>\n\n <!-- View All Iterations Link -->\n <div *ngIf=\"config.showViewAllIterations\" class=\"cqa-flex cqa-justify-end cqa-px-3 cqa-py-[10px]\">\n <a href=\"#\" class=\"cqa-text-[12px] 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 <!-- 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</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ConditionStepConfig, ConditionBranch, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-condition-step',\n templateUrl: './condition-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class ConditionStepComponent extends BaseStepComponent implements OnInit {\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() conditionText!: string;\n @Input() branches!: ConditionBranch[];\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: ConditionStepConfig;\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 type: 'condition',\n conditionText: this.conditionText,\n branches: this.branches,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as ConditionStepConfig;\n\n super.ngOnInit();\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","<div>\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)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\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\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Condition: {{ config.conditionText }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 <!-- Branch Buttons -->\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]\">\n <div\n *ngFor=\"let branch of config.branches\"\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\"\n [ngClass]=\"branch.executed \n ? 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]' \n : 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]'\">\n <div *ngIf=\"branch.executed\"><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=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>{{ branch.type.toUpperCase() }} ({{ branch.label }})</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\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><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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ config.stepNumber }}.{{ getSubStepIndex(branch.subSteps, subStep) }}. {{ subStep.description }}\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\" 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 <!-- 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</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ScreenshotData, LogEntry } from '../execution-step.models';\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 {\n @Input() screenshots?: ScreenshotData;\n @Input() logs?: LogEntry[];\n @Input() showFullLogsLink?: boolean = true;\n \n @Output() makeBaseline = new EventEmitter<void>();\n @Output() uploadBaseline = new EventEmitter<void>();\n @Output() analyze = new EventEmitter<void>();\n @Output() viewFullLogs = new EventEmitter<void>();\n\n onMakeBaseline(): void {\n console.log('Make current baseline clicked');\n this.makeBaseline.emit();\n }\n\n onUploadBaseline(): void {\n console.log('Upload baseline clicked');\n this.uploadBaseline.emit();\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\n","<div class=\"cqa-grid cqa-grid-cols-12 cqa-gap-4 cqa-w-full\">\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\">\n <div class=\"cqa-text-[10px] 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-min-h-[112px]\">\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 *ngIf=\"screenshots?.baseline\" [src]=\"screenshots.baseline\" 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-min-h-[112px]\">\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-min-h-[112px]\">\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)=\"onMakeBaseline()\"\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=\"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 Make current baseline\n </button>\n <button \n (click)=\"onUploadBaseline()\"\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=\"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 Upload baseline\n </button>\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\">\n <div class=\"cqa-text-[10px] 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-mb-4\">\n <div class=\"cqa-text-[11px] cqa-leading-[100%] cqa-text-[#737373]\">Console</div>\n \n <div *ngFor=\"let log of logs\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\" [ngClass]=\"getLogClass(log.level)\">\n {{ log.message }}\n </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]\">\n No logs available\n </div>\n </div>\n\n <a \n *ngIf=\"showFullLogsLink\"\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\">\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","import { Component, Input, OnInit } from '@angular/core';\nimport { FailedStepConfig, SubStep, FailureDetails, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-failed-step',\n templateUrl: './failed-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class FailedStepComponent extends BaseStepComponent implements OnInit {\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() subSteps!: SubStep[];\n @Input() failureDetails!: FailureDetails;\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 stepNumber: this.stepNumber,\n title: this.title,\n status: this.status,\n duration: this.duration,\n type: '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 onMakeBaseline(): void {\n console.log('Make current baseline clicked');\n }\n\n onUploadBaseline(): void {\n console.log('Upload baseline clicked');\n }\n\n onAnalyze(): void {\n console.log('Analyze clicked');\n }\n\n onViewFullLogs(): void {\n console.log('View full logs clicked');\n }\n}\n","<div>\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><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 }}. {{ config.title }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\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 [screenshots]=\"config.failureDetails.screenshots\"\n [logs]=\"config.failureDetails.logs\"\n (makeBaseline)=\"onMakeBaseline()\"\n (uploadBaseline)=\"onUploadBaseline()\"\n (analyze)=\"onAnalyze()\"\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, Input, OnInit } from '@angular/core';\nimport { AIAgentStepConfig, AIAgentAction, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.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' }\n})\nexport class AIAgentStepComponent extends BaseStepComponent implements OnInit {\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() prompt!: string;\n @Input() optimizedRun?: boolean;\n @Input() actionCount?: number;\n @Input() actions?: AIAgentAction[];\n @Input() selectedTabInput?: 'action-trace' | 'planner-timeline' | 'ai-reasoning';\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: AIAgentStepConfig;\n\n selectedTab: 'action-trace' | 'planner-timeline' | 'ai-reasoning' = 'action-trace';\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 type: 'ai-agent',\n prompt: this.prompt,\n optimizedRun: this.optimizedRun,\n actionCount: this.actionCount,\n actions: this.actions || [],\n selectedTab: this.selectedTabInput,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as AIAgentStepConfig;\n\n super.ngOnInit();\n this.selectedTab = this.config.selectedTab || 'action-trace';\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.prompt) {\n const content = `PROMPT\\n${this.prompt}`;\n this.copyToClipboard(content);\n }\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\n <!-- Lightbulb Icon and Step Number -->\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=\"#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></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-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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]\">\n AI Agent\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]\">\n {{ config.actionCount }} actions\n </span>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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\" 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-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" [innerHTML]=\"config.prompt\"></p>\n </div>\n <button class=\"cqa-p-1.5\" (click)=\"copyPrompt()\">\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.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-mb-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 }} actions</b> \n from previous runs\n </div>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <div\n *ngFor=\"let action of config.actions; let i = index\"\n class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-bg-[#F7FAFC]\" 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\"><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></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><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=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-bold cqa-text-gray-[#0B0B0B]\">{{ action.description }}</span>\n <span *ngIf=\"action.confidence\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] 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 </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"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-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\n </div>\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, OnInit } from '@angular/core';\nimport { ApiStepConfig, ApiAssertion, SubStep, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-api-step',\n templateUrl: './api-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class ApiStepComponent extends BaseStepComponent implements OnInit {\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() method!: string;\n @Input() endpoint!: string;\n @Input() statusCode!: number;\n @Input() responseTime!: number;\n @Input() requestBody?: any;\n @Input() responseBody?: any;\n @Input() assertions?: ApiAssertion[];\n @Input() initialActions?: SubStep[];\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: ApiStepConfig;\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 type: '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 assertions: this.assertions,\n initialActions: this.initialActions,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as ApiStepConfig;\n\n super.ngOnInit();\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 });\n }\n\n copyRequestBody(): void {\n if (this.requestBody) {\n const formattedJson = this.formatJson(this.requestBody);\n this.copyToClipboard(formattedJson);\n }\n }\n\n copyResponseBody(): void {\n if (this.responseBody) {\n const formattedJson = this.formatJson(this.responseBody);\n this.copyToClipboard(formattedJson);\n }\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\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=\"#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 <!-- 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\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 -->\n <div *ngIf=\"config.initialActions && config.initialActions.length > 0\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-ml-9\">\n <div\n *ngFor=\"let action of config.initialActions\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">{{ action.description }}</span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">{{ formatDuration(action.duration) }}</span>\n </div>\n </div>\n\n <!-- Request Summary Card -->\n <div 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 <button 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 </div>\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\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 [ngClass]=\"getStatusBadgeClass()\" 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]\">\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 Bodies -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-mt-4\">\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 <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 </div>\n <pre *ngIf=\"config.requestBody\" class=\"cqa-h-full cqa-text-[11px] cqa-leading-[13px] cqa-text-[#0B0B0B] cqa-bg-[#F8F8F8] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px]\">{{ formatJson(config.requestBody) }}</pre>\n <a *ngIf=\"config.requestBody\" href=\"#\" class=\"cqa-text-[12px] cqa-leading-[15px] cqa-no-underline cqa-text-primary cqa-font-medium 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\"><path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n View full request\n </a>\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 <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 </div>\n <pre *ngIf=\"config.responseBody\" [ngClass]=\"{'cqa-bg-[#FEF2F2] cqa-text-[#C10007]': config.statusCode >= 400}\" class=\"cqa-h-full cqa-text-[11px] cqa-leading-[13px] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px]\">{{ 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\" 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-items-start 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\"\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-[10px] cqa-leading-[13px]\" \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\">\n <div>\n <span>Expected:</span>\n <span [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 [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 <!-- 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</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FileDownloadStepConfig, StepStatus, TimingBreakdown } 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' }\n})\nexport class FileDownloadStepComponent extends BaseStepComponent implements OnInit {\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() fileName!: string;\n @Input() fileType!: string;\n @Input() fileSize?: string;\n @Input() filePath?: string;\n @Input() downloaded!: boolean;\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: FileDownloadStepConfig;\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 type: 'file-download',\n fileName: this.fileName,\n fileType: this.fileType,\n fileSize: this.fileSize,\n filePath: this.filePath,\n downloaded: this.downloaded,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as FileDownloadStepConfig;\n\n super.ngOnInit();\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 // Handle download action\n console.log('Download file:', this.fileName);\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 copyFilePath(): void {\n if (this.filePath) {\n this.copyToClipboard(this.filePath);\n }\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\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-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 (click)=\"onDownload()\"\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 <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 <button class=\"cqa-px-1.5 xqa-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 </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, OnInit } from '@angular/core';\nimport { DocumentVerificationStepConfig, ExtractedField, VerificationCheck, StepStatus, TimingBreakdown } 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' }\n})\nexport class DocumentVerificationStepComponent extends BaseStepComponent implements OnInit {\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\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 type: '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 copyToClipboard(text: string): void {\n navigator.clipboard.writeText(text).then(() => {\n console.log('Copied to clipboard:', text);\n });\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\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-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 } from '@angular/core';\nimport { PrerequisiteItem, StepStatus } from '../execution-step.models';\n\nexport type IconType = 'folder' | 'loop' | 'custom';\n\nexport interface IconConfig {\n type: IconType;\n svg?: string; // Custom SVG string when type is 'custom'\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' }\n})\nexport class MainStepCollapseComponent implements OnInit {\n @Input() title: string = 'Prerequisites';\n @Input() items!: PrerequisiteItem[];\n @Input() expanded: boolean = true;\n @Input() icon?: IconConfig;\n @Output() viewSteps = new EventEmitter<PrerequisiteItem>();\n\n isExpanded: boolean = true;\n\n ngOnInit(): void {\n this.isExpanded = this.expanded;\n }\n\n toggle(): void {\n this.isExpanded = !this.isExpanded;\n }\n\n formatDuration(seconds: number): string {\n if (seconds < 1) {\n return `${(seconds * 1000).toFixed(0)}ms`;\n }\n return `${seconds.toFixed(1)}s`;\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\n onViewSteps(item: PrerequisiteItem, event: Event): void {\n event.preventDefault();\n this.viewSteps.emit(item);\n }\n}\n","<!-- Header -->\n<div\nclass=\"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\"\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\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></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 <!-- Default Chain-Link Icon -->\n <!-- <div *ngIf=\"!icon || icon.type === 'custom'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.5 6.5L6.5 5.5M9.5 5.5L10.5 6.5M6.5 10.5L5.5 9.5M10.5 9.5L9.5 10.5M3 8C3 5.79086 4.79086 4 7 4H9C11.2091 4 13 5.79086 13 8C13 10.2091 11.2091 12 9 12H7C4.79086 12 3 10.2091 3 8Z\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div> -->\n\n <div><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></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 -->\n <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ items.length }}\n </span>\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<div\n *ngFor=\"let item of items\"\n class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n \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\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_48_121)\"><path 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\" stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g><defs><clipPath id=\"clip0_48_121\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#EF4444\"/>\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" 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\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" 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]\">\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 <!-- Duration with Clock Icon -->\n <div 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\"><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=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></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 -->\n <a\n href=\"#\"\n (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 View steps\n <svg width=\"16\" height=\"15\" viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" fill=\"#3F43EE\"/></svg>\n </a>\n </div>\n</div>\n</div>","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, AfterViewInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\n\nexport interface StepMarker {\n cumulativeDuration: number;\n result: 'SUCCESS' | 'FAILURE';\n}\n\ntype SegmentOption = {\n label: string;\n value: string;\n icon?: string;\n};\n@Component({\n selector: 'cqa-simulator',\n templateUrl: './simulator.component.html',\n styleUrls: []\n})\nexport class SimulatorComponent implements AfterViewInit, OnDestroy, OnChanges {\n\n @Input() videoUrl: string = '';\n @Input() videoCurrentDuration: number = 0;\n @Input() stepMarkers: StepMarker[] = [];\n @Input() screenShotUrl: string = '';\n @Input() platformName: string = 'Web - Chrome';\n @Input() platformType: 'browser' | 'device' = 'browser';\n @Input() isLive: boolean = false;\n\n @Output() videoTimeUpdate = new EventEmitter<number>();\n @Output() videoPlay = new EventEmitter<void>();\n @Output() videoPause = new EventEmitter<void>();\n\n @ViewChild('vplayer') vplayer!: ElementRef<HTMLVideoElement>;\n @ViewChild('timelineBar') timelineBar!: ElementRef<HTMLDivElement>;\n\n progress = 0;\n dragging = false;\n isPlaying: boolean = false;\n isFullScreen: boolean = false;\n currentView: string = 'video';\n\n segments: SegmentOption[] = [\n { label: 'Screenshots', value: 'screenshots', icon: 'photo' },\n { label: 'Video', value: 'video', icon: 'videocam' },\n ];\n\n private videoEventListenerCleanup: (() => void) | null = null;\n private lastSetDuration: number = -1;\n\n ngAfterViewInit(): void {\n this.attachVideoListeners();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['videoCurrentDuration'] && !changes['videoCurrentDuration'].firstChange) {\n const newDuration = changes['videoCurrentDuration'].currentValue;\n if (newDuration !== this.lastSetDuration && this.vplayer?.nativeElement) {\n this.seekToTime(newDuration);\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.videoEventListenerCleanup) {\n this.videoEventListenerCleanup();\n }\n }\n\n seekToTime(milliseconds: number): void {\n if (!this.vplayer?.nativeElement || !this.vplayer.nativeElement.duration) return;\n \n const seconds = milliseconds / 1000;\n const video = this.vplayer.nativeElement;\n \n const targetTime = Math.max(0, Math.min(seconds, video.duration));\n video.currentTime = targetTime;\n this.lastSetDuration = milliseconds;\n\n if (this.isPlaying) {\n video.play().catch(err => console.error('Play failed:', err));\n }\n }\n\n togglePlay(): void {\n if (!this.vplayer?.nativeElement) return;\n\n if (this.isPlaying) {\n this.vplayer.nativeElement.pause();\n this.isPlaying = false;\n this.videoPause.emit();\n } else {\n this.vplayer.nativeElement.play();\n this.isPlaying = true;\n this.videoPlay.emit();\n }\n }\n\n onTimelineClick(event: MouseEvent): void {\n if (!this.timelineBar?.nativeElement || !this.vplayer?.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 const targetTimeSeconds = percent * this.vplayer.nativeElement.duration;\n this.vplayer.nativeElement.currentTime = targetTimeSeconds;\n this.lastSetDuration = targetTimeSeconds * 1000;\n }\n\n startDrag(): void {\n this.dragging = true;\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 this.progress = percent * 100;\n }\n\n stopDrag(): void {\n if (!this.dragging || !this.vplayer?.nativeElement) return;\n\n this.dragging = false;\n const targetTimeSeconds = (this.progress / 100) * this.vplayer.nativeElement.duration;\n this.vplayer.nativeElement.currentTime = targetTimeSeconds;\n this.lastSetDuration = targetTimeSeconds * 1000;\n }\n\n onVideoMetadataLoaded(): void {\n this.attachVideoListeners();\n }\n\n onVideoCanPlay(): void {\n this.attachVideoListeners();\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 if (!this.dragging) {\n const percent = (currentMs / (video.duration * 1000)) * 100;\n this.progress = Math.min(100, Math.max(0, percent));\n this.videoTimeUpdate.emit(currentMs);\n }\n };\n\n video.addEventListener('timeupdate', handler);\n\n this.videoEventListenerCleanup = () => {\n video.removeEventListener('timeupdate', handler);\n };\n }, 100);\n }\n\n getStepLeftPosition(step: StepMarker): number {\n if (!this.vplayer?.nativeElement?.duration) return 0;\n return (step.cumulativeDuration / (this.vplayer.nativeElement.duration * 1000)) * 100;\n }\n\n getStepColor(step: StepMarker): string {\n return step.result === 'SUCCESS' ? '#28a745' : '#dc3545';\n }\n\n toggleFullScreen(): void {\n this.isFullScreen = !this.isFullScreen;\n }\n\n onSegmentChange(value: string): void {\n this.currentView = value;\n }\n\n formatTime(seconds: number): string {\n if (!seconds || isNaN(seconds)) return '00:00';\n \n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n \n return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\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\">\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=\"platformType === '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=\"platformType === '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\">{{ platformName }}</p>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\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 </div>\n </div>\n </div>\n <div class=\"cqa-w-full cqa-bg-[#F3F4F6] cqa-h-[calc(100%-41px)]\">\n <div *ngIf=\"currentView === 'video'\" class=\"cqa-h-full cqa-flex cqa-flex-col cqa-justify-center\">\n <div class=\"cqa-w-full cqa-py-4 cqa-flex cqa-items-center cqa-max-h-[calc(100%-35px)]\" *ngIf=\"videoUrl\" [ngClass]=\"{'!cqa-h-full': platformType === 'device'}\">\n <video\n #vplayer\n class=\"cqa-object-contain cqa-w-full cqa-min-h-[250px] cqa-max-h-full cqa-block cqa-bg-black\"\n [src]=\"videoUrl\"\n type=\"video/webm\"\n (loadedmetadata)=\"onVideoMetadataLoaded()\"\n (canplay)=\"onVideoCanPlay()\"\n ></video>\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=\"!videoUrl\">\n No video recording found\n </div>\n \n <div class=\"cqa-px-2 cqa-py-2 cqa-bg-white\" style=\"border-top: 1px solid #E5E7EB;\" *ngIf=\"videoUrl\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button \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 <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 \n <span class=\"cqa-text-[#9CA3AF] cqa-text-[9px] cqa-font-normal cqa-whitespace-nowrap cqa-select-none cqa-mr-[20px]\">\n {{ formatTime(vplayer?.nativeElement?.currentTime || 0) }}\n </span>\n \n <div \n #timelineBar\n class=\"cqa-relative cqa-h-1 cqa-bg-gray-200 cqa-rounded-full cqa-cursor-pointer cqa-flex-1\"\n (click)=\"onTimelineClick($event)\" \n (mousemove)=\"onDrag($event)\"\n (mouseup)=\"stopDrag()\" \n (mouseleave)=\"stopDrag()\">\n \n <div \n *ngFor=\"let step of stepMarkers\" \n class=\"cqa-absolute cqa-w-1 cqa-h-full cqa-top-0 cqa-rounded-sm\"\n [style.left.%]=\"getStepLeftPosition(step)\"\n [style.background]=\"getStepColor(step)\"\n style=\"pointer-events: none; z-index: 20;\">\n </div>\n \n <div \n class=\"cqa-absolute cqa-left-0 cqa-top-0 cqa-h-full cqa-bg-green-500 cqa-rounded-full cqa-transition-[width] cqa-duration-100\"\n [style.width.%]=\"progress\"\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-green-600 cqa-rounded-full cqa-cursor-grab active:cqa-cursor-grabbing cqa-shadow-md\"\n [style.left.%]=\"progress\"\n style=\"transform: translate(-50%, -50%); z-index: 10;\"\n (mousedown)=\"startDrag()\">\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"currentView === 'screenshots'\" class=\"cqa-h-full\">\n <div class=\"cqa-w-full cqa-py-4 cqa-h-full cqa-flex cqa-items-center\" *ngIf=\"screenShotUrl\">\n <img\n [src]=\"screenShotUrl\"\n alt=\"Screenshot\"\n class=\"cqa-object-contain cqa-w-full cqa-max-h-full cqa-block cqa-bg-black cqa-mx-auto\"\n />\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 </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\">\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, Input } 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';\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\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}","<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-text-[#3f43ee]\" [ngClass]=\"{\n 'cqa-text-xs': isSmall,\n 'cqa-text-sm': !isSmall\n }\">\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 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-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 <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, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\nexport type ImageViewType = 'baseline' | 'current' | 'difference';\n\n@Component({\n selector: 'cqa-visual-difference-modal',\n templateUrl: './visual-difference-modal.component.html',\n styleUrls: []\n})\nexport class VisualDifferenceModalComponent implements OnChanges {\n @Input() baselineUrl: string = '';\n @Input() currentUrl: string = '';\n @Input() differenceUrl: string = '';\n @Input() title: string = 'Visual Difference';\n @Input() subtitle: string = 'Comparing Baseline vs. Current Execution';\n @Input() isOpen: boolean = false;\n @Output() close = new EventEmitter<void>();\n\n currentView: ImageViewType = 'baseline';\n baselineImageError: boolean = false;\n currentImageError: boolean = false;\n differenceImageError: boolean = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['baselineUrl']) {\n this.baselineImageError = false;\n }\n if (changes['currentUrl']) {\n this.currentImageError = false;\n }\n if (changes['differenceUrl']) {\n this.differenceImageError = false;\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.close.emit();\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 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 *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-bg-white cqa-rounded-lg cqa-shadow-xl cqa-flex cqa-flex-col cqa-max-w-[90vw] cqa-h-[70vh] cqa-w-full cqa-overflow-hidden\"\n style=\"max-width: 1200px;\"\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</div>\n\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 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\" 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<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, 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 { EmptyStateConfig } from '../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\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 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 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 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: 'UNCHANGED' | 'STATUS_CHANGED' | 'TIMING_CHANGED' | 'ADDED' | 'REMOVED';\n}\n\nexport interface ComparisonResponse {\n summary: ComparisonSummary;\n stepsComparison: StepComparison[];\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() isLoadingRuns: boolean = false;\n @Input() hasMoreRuns: boolean = false;\n @Input() isComparingRuns: boolean = false;\n \n @Output() searchRuns = new EventEmitter<SearchRequest>();\n @Output() loadMoreRuns = new EventEmitter<string>();\n @Output() compareRuns = new EventEmitter<CompareRequest>();\n\n form!: FormGroup;\n runASelectConfig!: DynamicSelectFieldConfig;\n runBSelectConfig!: DynamicSelectFieldConfig;\n\n selectedRunA?: RunData;\n selectedRunB?: RunData;\n comparisonSummary?: ComparisonSummary;\n stepComparisons: StepComparison[] = [];\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 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 }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['runs'] && !changes['runs'].firstChange) {\n this.setupSelectConfigs();\n this.cdr.markForCheck();\n }\n \n if (changes['comparisonData'] && this.comparisonData) {\n this.handleComparisonData();\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\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 id: run.id,\n value: run.id,\n label: this.formatRunLabel(run),\n name: this.formatRunLabel(run)\n }));\n this.lastRuns = this.runs;\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 searchable: true,\n serverSearch: 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 searchable: true,\n serverSearch: 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.cdr.markForCheck();\n }\n\n private convertToRunData(data: TestCaseResultData): RunData {\n const device = data.testDeviceResult?.testDeviceSettings?.deviceName || \n data.testDeviceResult?.testDeviceSettings?.platform || \n 'Unknown Device';\n const browser = data.testDeviceResult?.testDeviceSettings?.browser || 'Unknown Browser';\n const platform = data.testDeviceResult?.testDeviceSettings?.platform || 'Unknown 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 this.tableColumns = [\n {\n fieldId: 'step',\n fieldName: 'Step',\n fieldValue: 'stepTitle',\n isShow: true,\n weight: 3,\n render: (row: StepComparison) => {\n return `\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B]\">${row.stepTitle}</span>\n </div>\n `;\n }\n },\n {\n fieldId: 'runA',\n fieldName: 'Run A',\n isShow: true,\n weight: 1.5,\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: 'Run B',\n isShow: true,\n weight: 1.5,\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 render: (row: StepComparison) => {\n const changeLabels: Record<string, string> = {\n 'UNCHANGED': 'Unchanged',\n 'STATUS_CHANGED': 'Status Changed',\n 'TIMING_CHANGED': 'Timing Changed',\n 'ADDED': 'Added',\n 'REMOVED': 'Removed'\n };\n const changeColors: Record<string, string> = {\n 'UNCHANGED': '#6B7280',\n 'STATUS_CHANGED': '#F59E0B',\n 'TIMING_CHANGED': '#3B82F6',\n 'ADDED': '#10B981',\n 'REMOVED': '#EF4444'\n };\n const changeBgColors: Record<string, string> = {\n 'UNCHANGED': '#F3F4F6',\n 'STATUS_CHANGED': '#FEF3C7',\n 'TIMING_CHANGED': '#DBEAFE',\n 'ADDED': '#D1FAE5',\n 'REMOVED': '#FEE2E2'\n };\n\n const label = changeLabels[row.change] || row.change;\n const color = changeColors[row.change] || '#6B7280';\n const bgColor = changeBgColors[row.change] || '#F3F4F6';\n\n return `\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-semibold cqa-w-max\" \n style=\"background-color: ${bgColor}; color: ${color};\">\n ${label}\n </span>\n `;\n }\n }\n ];\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 formatDuration(milliseconds: number): string {\n const seconds = milliseconds / 1000;\n if (seconds < 60) {\n return `${seconds.toFixed(1)}s`;\n }\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${minutes}m ${remainingSeconds}s`;\n }\n\n private handleComparisonData(): void {\n if (!this.comparisonData) return;\n\n this.comparisonSummary = this.comparisonData.summary;\n this.stepComparisons = this.comparisonData.stepsComparison;\n this.pageIndex = 0;\n this.cdr.markForCheck();\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.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: block; width: 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-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 *ngIf=\"selectedRunA\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runAStatusBgColor\"\n [style.border-color]=\"runAStatusBorderColor\">\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 || '—' }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n </div>\n </div>\n </div>\n \n <div *ngIf=\"selectedRunB\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runBStatusBgColor\"\n [style.border-color]=\"runBStatusBorderColor\">\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 || '—' }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"cqa-w-full cqa-flex cqa-justify-center\">\n <cqa-button \n variant=\"filled\" \n [disabled]=\"!canCompare\"\n (click)=\"onCompareClick()\">\n {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n </cqa-button>\n </div>\n </div>\n\n <div *ngIf=\"showComparison && comparisonSummary && stepComparisons && stepComparisons.length > 0\" \n class=\"cqa-bg-white cqa-pt-3 cqa-pb-0 sm:cqa-pb-1 sm:cqa-pt-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\">\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 xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M12.6759 10.5003L8.00919 2.33363C7.90743 2.15408 7.75987 2.00474 7.58156 1.90083C7.40325 1.79693 7.20056 1.74219 6.99419 1.74219C6.78781 1.74219 6.58513 1.79693 6.40681 1.90083C6.2285 2.00474 6.08094 2.15408 5.97919 2.33363L1.31252 10.5003C1.20967 10.6784 1.15574 10.8806 1.15619 11.0863C1.15665 11.2919 1.21147 11.4939 1.31511 11.6715C1.41875 11.8492 1.56752 11.9963 1.74634 12.0979C1.92516 12.1996 2.12767 12.2521 2.33335 12.2503H11.6667C11.8714 12.2501 12.0724 12.196 12.2496 12.0935C12.4268 11.9911 12.5739 11.8438 12.6762 11.6664C12.7784 11.4891 12.8322 11.288 12.8322 11.0833C12.8321 10.8786 12.7782 10.6776 12.6759 10.5003Z\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 5.25V7.58333\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 9.91699H7.00583\" stroke=\"#FD9A00\" 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-[#E17100]\">{{ 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\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=\"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=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#2B7FFF\" 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-[#155DFC]\">{{ comparisonSummary.timing }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Timing Changed</span>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"stepComparisons\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\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\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(milliseconds: number): string {\n const seconds = milliseconds / 1000;\n if (seconds < 60) {\n return `${seconds.toFixed(1)}s`;\n }\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${minutes}m ${remainingSeconds}s`;\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 [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, Output, EventEmitter } 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}\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 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%;\">\n <div class=\"cqa-h-[200px] cqa-overflow-y-auto cqa-bg-[#FEF2F2] cqa-p-[17px] cqa-rounded-lg cqa-overflow-hidden cqa-flex cqa-flex-col cqa-gap-3\" style=\"border: 1px solid #FECACA;\">\n <div>\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]\">Error: {{ 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>\n\n <div class=\"cqa-h-[114px] 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-[85px] cqa-max-h-[85px] cqa-overflow-y-auto cqa-font-medium\">\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-[85px] 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 { 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() 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 [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\"\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]=\"inputSizeClasses\"\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 } 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%;\">\n <div class=\"cqa-h-[200px] 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\" *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 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';\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\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\n @Output() buttonClick = new EventEmitter<string>();\n @Output() closeModal = 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 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 \n","<div \n *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-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2\"\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-4\"\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\">\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 <div *ngIf=\"shouldShowLastCompletedStep\" class=\"cqa-my-4 cqa-p-[17px] cqa-rounded-[10px]\" style=\"border: 1px solid #E5E7EB;\">\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]\">\n {{ lastCompletedStep }}\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 i = index\">\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 { NgModule, forwardRef, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\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 { 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 { OverlayModule, OverlayContainer } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ButtonComponent } from './button/button.component';\nimport { SearchBarComponent } from './search-bar/search-bar.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 { 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 { 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 { 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 { 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 { SelfHealAnalysisComponent } from './execution-screen/self-heal-analysis/self-heal-analysis.component';\nimport { AIAgentStepComponent } from './execution-screen/ai-agent-step/ai-agent-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 { 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 { 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 { 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 { AiReasoningComponent } from './ai-reasoning/ai-reasoning.component';\nimport { ExecutionResultModalComponent } from './execution-result-modal/execution-result-modal.component';\n\n@NgModule({\n declarations: [\n ButtonComponent,\n SearchBarComponent,\n SegmentControlComponent,\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 CoverageModuleCardComponent,\n TestDistributionCardComponent,\n FailedTestCasesCardComponent,\n DynamicSelectFieldComponent,\n SelectedFiltersComponent,\n InsightCardComponent,\n BadgeComponent,\n DropdownButtonComponent,\n HeatErrorMapCellComponent,\n EmptyStateComponent,\n TableTemplateComponent,\n FullTableLoaderComponent,\n TableDataLoaderComponent,\n BasicStepComponent,\n StepRendererComponent,\n StepGroupComponent,\n LoopStepComponent,\n ConditionStepComponent,\n FailedStepComponent,\n SelfHealAnalysisComponent,\n AIAgentStepComponent,\n ApiStepComponent,\n FileDownloadStepComponent,\n DocumentVerificationStepComponent,\n MainStepCollapseComponent,\n VisualComparisonComponent,\n SimulatorComponent,\n ConsoleAlertComponent,\n AiDebugAlertComponent,\n NetworkRequestComponent,\n RunHistoryCardComponent,\n VisualDifferenceModalComponent,\n ConfigurationCardComponent,\n CompareRunsComponent,\n IterationsLoopComponent,\n FailedStepCardComponent,\n CustomInputComponent,\n AiReasoningComponent,\n ExecutionResultModalComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatIconModule,\n MatMenuModule,\n MatButtonModule,\n MatFormFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatCheckboxModule,\n MatRadioModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n OverlayModule,\n PortalModule\n ],\n exports: [\n ButtonComponent,\n SearchBarComponent,\n SegmentControlComponent,\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 CoverageModuleCardComponent,\n TestDistributionCardComponent,\n FailedTestCasesCardComponent,\n DynamicSelectFieldComponent,\n SelectedFiltersComponent,\n InsightCardComponent,\n BadgeComponent,\n DropdownButtonComponent,\n HeatErrorMapCellComponent,\n EmptyStateComponent,\n TableTemplateComponent,\n FullTableLoaderComponent,\n TableDataLoaderComponent,\n BasicStepComponent,\n StepRendererComponent,\n StepGroupComponent,\n LoopStepComponent,\n ConditionStepComponent,\n FailedStepComponent,\n SelfHealAnalysisComponent,\n AIAgentStepComponent,\n ApiStepComponent,\n FileDownloadStepComponent,\n DocumentVerificationStepComponent,\n MainStepCollapseComponent,\n VisualComparisonComponent,\n SimulatorComponent,\n ConsoleAlertComponent,\n AiDebugAlertComponent,\n NetworkRequestComponent,\n RunHistoryCardComponent,\n VisualDifferenceModalComponent,\n ConfigurationCardComponent,\n CompareRunsComponent,\n IterationsLoopComponent,\n FailedStepCardComponent,\n CustomInputComponent,\n AiReasoningComponent,\n ExecutionResultModalComponent\n ],\n providers: [\n { provide: OverlayContainer, useClass: TailwindOverlayContainer },\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 ['failed', FailedStepComponent],\n ['ai-agent', AIAgentStepComponent],\n ['api', ApiStepComponent],\n ['file-download', FileDownloadStepComponent],\n ['document-verification', DocumentVerificationStepComponent],\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 { 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1.ButtonComponent","i1","i2.FullTableLoaderComponent","i3.TableDataLoaderComponent","i4","i5.DynamicCellContainerDirective","i5","i2.DaterangepickerDirective","i2.DynamicSelectFieldComponent","i3.DaterangepickerComponent","i4.ButtonComponent","i6","i1.MetricsBlockComponent","i2.EmptyStateComponent","getMetadataColorStyle","i1.BadgeComponent","i3.ButtonComponent","i1.SearchBarComponent","i2.ButtonComponent","i3.ColumnVisibilityComponent","i4.SelectedFiltersComponent","i5.DynamicFilterComponent","i6.DynamicTableComponent","i7.EmptyStateComponent","i8.PaginationComponent","i9.TableActionToolbarComponent","i10","i1.SelfHealAnalysisComponent","i1.StepRendererComponent","i1.VisualComparisonComponent","i2.SegmentControlComponent","i5.TableTemplateComponent","i1.TableTemplateComponent"],"mappings":"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"}
1
+ {"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/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/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/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/templates/table-template.component.ts","../../../src/lib/templates/table-template.component.html","../../../src/lib/utils/tw-overlay-container.ts","../../../src/lib/execution-screen/step-registry.token.ts","../../../src/lib/execution-screen/base-step.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/basic-step/basic-step.component.ts","../../../src/lib/execution-screen/basic-step/basic-step.component.html","../../../src/lib/execution-screen/step-renderer/step-renderer.component.ts","../../../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/visual-comparison/visual-comparison.component.ts","../../../src/lib/execution-screen/visual-comparison/visual-comparison.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/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/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/visual-difference-modal/visual-difference-modal.component.ts","../../../src/lib/visual-difference-modal/visual-difference-modal.component.html","../../../src/lib/configuration-card/configuration-card.component.ts","../../../src/lib/configuration-card/configuration-card.component.html","../../../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/custom-input/custom-input.component.ts","../../../src/lib/custom-input/custom-input.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/ui-kit.module.ts","../../../src/lib/dialog/dialog-ref.ts","../../../src/lib/dialog/dialog.tokens.ts","../../../src/lib/dialog/dialog.service.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 @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 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.disabled) {\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\n if (this.variant === 'filled') {\n if (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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 (this.disabled) {\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.disabled) {\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.disabled) {\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.disabled) {\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.disabled) {\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.disabled) {\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\" style=\"pointer-events: none;\">\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]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n >\n\n <mat-icon *ngIf=\"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=\"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 AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\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\ntype SegmentOption = {\n label: string;\n value: string;\n disabled?: boolean;\n icon?: string;\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\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: inline-block;\">\n <div\n #segmentContainer\n class=\"cqa-relative cqa-inline-flex cqa-flex-row cqa-items-start cqa-p-[3.5px] cqa-h-[31.5px] cqa-bg-surface-light cqa-rounded-[8px]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || 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-10 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px] 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 cqa-flex-none\"\n [ngClass]=\"{\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 }\" [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 </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 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 [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\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 (this.componentRef && changes['componentConfig'] && this.componentConfig) {\n // Update component inputs if config changed\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 // Use detectChanges to ensure styles are updated immediately\n this.componentRef.changeDetectorRef.detectChanges();\n this.cdr.detectChanges();\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 // Mark for change detection - use detectChanges to ensure styles are applied\n this.componentRef.changeDetectorRef.detectChanges();\n this.cdr.detectChanges();\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 { DynamicCellTemplateDirective, DynamicHeaderTemplateDirective } from \"./dynamic-cell.directive\";\nimport { ComponentRenderConfig } from \"./component-render-config.interface\";\n\nexport { ComponentRenderConfig } from \"./component-render-config.interface\";\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 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 styleUrls: [],\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 // 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 @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 // 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 // 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 this.computedColumnWidths = cols.map(c => {\n if (c.fixedPx && c.fixedPx > 0) {\n return `${c.fixedPx}px`;\n }\n const share = (c.weight || 1) / totalWeight;\n return `calc((100% - ${fixedPx}px) * ${share.toFixed(4)})`;\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 get allSelected(): boolean {\n const rows = this.data || [];\n if (!rows.length) return false;\n return rows.every(r => !!r?.isSelected);\n }\n\n get someSelected(): boolean {\n const rows = this.data || [];\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 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 = checked;\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\" [class.is-loading]=\"true\" *ngIf=\"!showTableLoading\">\n <colgroup>\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 <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 [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 <tr class=\"table-row cqa-bg-surface-default hover:cqa-bg-surface-hover\" *ngFor=\"let row of computedData; let rowIndex = index; trackBy: trackByIndex\"\n [class.selected]=\"row?.isSelected\">\n <ng-container *ngFor=\"let col of visibleColumns; trackBy: trackByIndex\">\n <td class=\"cell cqa-px-[10.5px] cqa-py-[11px]\" \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 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 (change)=\"onRowSelectChange($event, row)\" />\n <label\n class=\"custom-checkbox-label\"\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 } 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\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\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 togglePageSizeMenu(): void {\n this.pageSizeOpen = !this.pageSizeOpen;\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\">\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-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]=\"'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]\">\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}\n\nexport interface DynamicSelectFieldConfig {\n key: string;\n label?: string;\n placeholder?: string;\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 /** 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}\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 @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\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 /**\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 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) {\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 };\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.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) {\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' : ''}`.trim();\n }\n\n get isMultiple(): boolean {\n return this.toBoolean(this.config?.multiple);\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 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 if (this.hasExistingValue(currentValue)) {\n return;\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 optionId = opt.id ?? opt.value;\n if (this.isMultiple) {\n if (!Array.isArray(controlValue)) return false;\n return controlValue.includes(optionId);\n }\n return controlValue === optionId;\n }\n\n private getAllOptionIds(): any[] {\n const options = this.config?.options || [];\n return options.map(o => (o.id ?? o.value)).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 // 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 loadingMore when closing\n this.loadingMore = 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 // Optional: only trigger initial fetch on open when explicitly requested.\n if (this.config?.serverSearch && this.toBoolean(this.config?.initialFetchOnOpen)) {\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 // 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\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 * 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 idOf = (o: SelectOption) => (o.id ?? o.value);\n const selectedOptions = allOptions.filter(o => selectedIds.includes(idOf(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 id = idOf(o);\n if (id === undefined) continue;\n if (!seen.has(id)) {\n seen.add(id);\n merged.push(o);\n }\n }\n for (const o of baseFiltered) {\n const id = idOf(o);\n if (id === undefined) continue;\n if (!seen.has(id)) {\n seen.add(id);\n merged.push(o);\n }\n }\n return merged;\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 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 // If click is inside any open mat-select panel, ignore\n const panelEls = Array.from(document.querySelectorAll('.mat-select-panel')) as HTMLElement[];\n const clickInsidePanel = panelEls.some((el) => el.contains(target));\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 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 // Request more only if not currently loading and hasMore still true\n if (this.hasScrolledSinceOpen && !this.loadingMore && this.config?.hasMore) {\n this.loadingMore = true;\n const key = this.config?.key || '';\n const q = this.searchTextByKey[key] || '';\n // Emit outputs and invoke optional callbacks\n this.loadMore.emit({ key, query: q });\n try { this.config.onLoadMore?.(q); } catch {}\n }\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\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\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)=\"$event.stopPropagation()\" (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 [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\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 class=\"cqa-min-w-0\" *ngIf=\"hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n <span class=\"cqa-min-w-0\" *ngIf=\"!hasHighlighting\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n <span *ngIf=\"hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n <span *ngIf=\"!hasHighlighting\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </ng-template>\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</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, Output, SimpleChanges, ViewChildren, QueryList } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\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 {\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\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 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 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.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 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()\">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()\">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()\">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}\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 @Output() actionClick = new EventEmitter<{ id: string; selected: any[] }>();\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 onAction(action: TableAction): void {\n if (this.isDisabled(action)) {\n return;\n }\n const context = { id: action.id, selected: this.selectedItems || [] };\n if (action.onClick) {\n action.onClick(context);\n }\n this.actionClick.emit(context);\n }\n}\n\n\n","<div class=\"cqa-ui-root\">\n <div\n class=\"action-toolbar cqa-flex cqa-items-center 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]\"\n *ngIf=\"hasSelection\">\n <div class=\"action-toolbar-left cqa-text-[14px] cqa-leading-[21px] cqa-font-medium\">\n {{ selectionLabel }}\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)\" (click)=\"!isDisabled(action) && onAction(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\">\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 </div>\n <!-- Forwards clicks inside toolbar without affecting outer selections -->\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 md:cqa-h-[63px] 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-min-h-[53px] 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] md:cqa-h-[61px] 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\"\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} 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}\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 }\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, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.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() workspaceMultiple: boolean = false;\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() workspaceOptionStyle: 'checkmark' | 'checkbox' = 'checkbox';\n @Input() workspaceShowSelectAll: boolean = false;\n @Input() workspaceCloseOnSelect: boolean = false;\n @Input() workspaceOnSearch?: (query: string) => void;\n @Input() workspaceOnLoadMore?: (query?: string) => void;\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(): DynamicSelectFieldConfig {\n return {\n key: 'workspace',\n placeholder: this.workspacePlaceholder,\n disabled: this.workspaceDisabled,\n multiple: this.workspaceMultiple,\n searchable: this.workspaceSearchable,\n serverSearch: this.workspaceServerSearch,\n hasMore: this.workspaceHasMore,\n isLoading: this.workspaceIsLoading,\n optionStyle: this.workspaceOptionStyle,\n showSelectAll: this.workspaceShowSelectAll,\n closeOnSelect: this.workspaceCloseOnSelect,\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 const normalized = this.workspaceMultiple\n ? Array.isArray(val) ? val : (val != null ? [val] : [])\n : (Array.isArray(val) ? (val.length ? val[0] : undefined) : val);\n ctrl.setValue(normalized, { emitEvent: false });\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-dynamic-select [form]=\"workspaceForm\" [config]=\"workspaceConfig\" (selectClick)=\"workspaceSelectClick.emit()\">\n </cqa-dynamic-select>\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 {\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\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\n /** Internal generation state */\n isGenerating: boolean = false;\n isGenerated: boolean = false;\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 for ~12 seconds\n this.isGenerated = false;\n this.isGenerating = true;\n\n // Clear any existing timer defensively\n \n setTimeout(() => {\n this.isGenerating = false;\n this.isGenerated = true;\n }, 200);\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 cqa-cursor-pointer\">\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 cqa-cursor-pointer\">\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 @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 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 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 [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)\" 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 /** 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 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\">\n <div class=\"cqa-w-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 [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 tags\"\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 </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 { 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\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 [matTooltip]=\"chip.hasMore ? chip.fullText : ''\"\n [matTooltipDisabled]=\"!chip.hasMore\"\n matTooltipPosition=\"above\">\n <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-medium cqa-text-primary\">{{ chip.label || chip.key\n }}:</span>\n <span class=\"cqa-text-[12px] cqa-leading-[16px]\">{{ 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 (click)=\"removeChip.emit(chip)\" 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\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 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 \n // Only apply white text class if custom icon color is not provided\n if (!this.iconColor) {\n return [...baseClasses, 'cqa-text-white'].join(' ');\n }\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\" style=\"display: inline-block;\">\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 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 {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n SimpleChanges,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { DynamicFilterItem } 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\n // Search bar outputs\n @Output() onSearchChange = new EventEmitter<string>();\n\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() showFilterPanel: boolean = false;\n @Input() showFilterButton: boolean = true;\n\n // Other button input\n @Input() otherButtonLabel: string = 'Other Button';\n @Input() otherButtonVariant: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' | 'grey-solid' = 'filled';\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 // 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() selectedAutoRefreshInterval: number = 0;\n @Input() pageIndex: number = 0;\n @Input() pageSize: number = 10;\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 // 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 // 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\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 // Internal column visibility state\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 }\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 return;\n }\n\n this.filteredRows = [...this.data];\n this.applyPagination();\n this.initializeColumnVisibility();\n this.updateComputedColumns();\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 // Initialize visibility state for all visibility columns (default to true)\n for (const col of this._cachedVisibilityColumns) {\n if (this._columnVisibility[col.id] === undefined) {\n this._columnVisibility[col.id] = true;\n }\n }\n }\n\n get anyRowSelected(): boolean {\n return !!(this.pagedRows && this.pagedRows.some(r => !!(r as any).isSelected));\n }\n\n get currentSelectedItems(): any[] {\n return (this.pagedRows || []).filter(r => !!(r as any).isSelected);\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 }\n\n onAutoRefreshChange(intervalMs: number): void {\n this.selectedAutoRefreshInterval = intervalMs;\n this.setupAutoRefresh(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 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 let text = '';\n if (Array.isArray(value)) {\n text = value.map((v: any) => (v?.name ?? v?.label ?? v?.value ?? 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 = (value?.name ?? value?.label ?? value?.value ?? JSON.stringify(value));\n }\n } else {\n text = String(value);\n }\n chips.push({ key, 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 }\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","<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=\"showFilterButton\"\n variant=\"grey-solid\"\n icon=\"add\"\n [text]=\"'Filter'\"\n (clicked)=\"toggleFilter()\"\n >\n <span>Filter</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 <cqa-button *ngIf=\"showOtherButton\" [variant]=\"otherButtonVariant\" [text]=\"otherButtonLabel\"></cqa-button>\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 [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\">\n <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n <app-dynamic-table\n [columns]=\"computedColumns\"\n [data]=\"pagedRows\"\n [isTableLoading]=\"isTableLoading\"\n [isTableDataLoading]=\"isTableDataLoading\">\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 [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]=\"currentSelectedItems\"\n [actions]=\"actions\"\n (actionClick)=\"actionClick($event)\"\n ></cqa-table-action-toolbar>\n </div>\n \n </div>\n</div>\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('ctc-select-panel') ||\n pane.classList.contains('ctc-date-range-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 const hasLibraryDatePickerInside = pane.querySelector('.ctc-date-range-panel') !== null;\n \n const isLibraryOverlay = paneHasLibraryClass || hasLibraryDialogInside || \n hasLibrarySelectInside || hasLibraryDatePickerInside;\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","import { InjectionToken, Type } from '@angular/core';\n\nexport const STEP_COMPONENT_MAP = new InjectionToken<Map<string, Type<any>>>('STEP_COMPONENT_MAP');\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 return `${seconds.toFixed(1)}s`;\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { SelfHealAnalysisData, SelfHealAction } 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 {\n // Individual inputs\n @Input() originalLocator!: string;\n @Input() healedLocator!: string;\n @Input() confidence!: number; // 0-100\n @Input() healMethod!: string; // e.g., \"Semantic Attribute Matching\"\n\n @Output() action = new EventEmitter<SelfHealAction>();\n\n // Data property built from individual inputs\n data!: SelfHealAnalysisData;\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 }\n\n onAccept(): void {\n this.action.emit('accept');\n }\n\n onReject(): void {\n this.action.emit('reject');\n }\n\n onModifyAccept(): void {\n this.action.emit('modify-accept');\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-[10px] 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]\">\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 [value]=\"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]\">Original 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 [value]=\"data.healedLocator\" \n readonly\n class=\"cqa-w-full cqa-py-1 cqa-px-3 !cqa-border !cqa-border-solid !cqa-border-[#A7F3D0] cqa-rounded !cqa-bg-white cqa-text-[8px] cqa-leading-[12px] cqa-text-[#047857]\"\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 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 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 Accept\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 (click)=\"onModifyAccept()\"\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 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 Modify & Accept\n </button>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BasicStepConfig, SelfHealAction, SubStep, StepStatus, TimingBreakdown, SelfHealAnalysisData } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-basic-step',\n templateUrl: './basic-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class BasicStepComponent extends BaseStepComponent implements OnInit {\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() subSteps!: SubStep[];\n @Input() selfHealAnalysis?: SelfHealAnalysisData;\n @Input() selfHealed?: boolean;\n @Input() selfHealDuration?: number;\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: BasicStepConfig;\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 type: 'basic',\n subSteps: this.subSteps || [],\n selfHealAnalysis: this.selfHealAnalysis,\n selfHealed: this.selfHealed,\n selfHealDuration: this.selfHealDuration,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as BasicStepConfig;\n\n super.ngOnInit();\n }\n\n get hasSubSteps(): boolean {\n return this.subSteps && this.subSteps.length > 0;\n }\n\n onSelfHealAction(action: SelfHealAction): void {\n switch (action) {\n case 'accept':\n this.onAccept();\n break;\n case 'reject':\n this.onReject();\n break;\n case 'modify-accept':\n this.onModifyAccept();\n break;\n }\n }\n\n onAccept(): void {\n console.log('Accept action clicked');\n }\n\n onReject(): void {\n console.log('Reject action clicked');\n }\n\n onModifyAccept(): void {\n console.log('Modify & Accept action clicked');\n }\n}\n","<div>\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 \n <!-- Status Icon -->\n <!-- {{ getStatusIcon(config.status) }} -->\n <div><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\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(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 && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <div\n *ngFor=\"let subStep of 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 <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n [ngClass]=\"getStatusColorClass(subStep.status)\">\n {{ getStatusIcon(subStep.status) }}\n </mat-icon> -->\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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\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\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\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</div>\n","import { Component, Input, ViewChild, ViewContainerRef, OnChanges, SimpleChanges, Type, AfterViewInit, Inject } from '@angular/core';\nimport { ExecutionStepConfig } 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 {\n @Input() step!: ExecutionStepConfig;\n @ViewChild('container', { read: ViewContainerRef }) container!: ViewContainerRef;\n\n constructor(\n @Inject(STEP_COMPONENT_MAP) private componentMap: Map<string, Type<any>>\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['step'] && this.container) {\n this.loadComponent();\n }\n }\n\n ngAfterViewInit(): void {\n this.loadComponent();\n }\n\n private loadComponent() {\n if (!this.container || !this.step) return;\n \n this.container.clear();\n const componentType = this.componentMap.get(this.step.type);\n \n if (componentType) {\n const componentRef = this.container.createComponent(componentType);\n const instance = componentRef.instance;\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 \n // Also set config for backward compatibility with components that still use config input\n if ('config' in instance) {\n (instance as any).config = this.step;\n }\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { StepGroupConfig, ExecutionStepConfig, StepStatus, TimingBreakdown } 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 styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class StepGroupComponent extends BaseStepComponent implements OnInit {\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() groupName!: string;\n @Input() steps!: ExecutionStepConfig[];\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 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 type: 'step-group',\n groupName: this.groupName,\n steps: this.steps,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as StepGroupConfig;\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\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 }\n }\n}\n","<div class=\"cqa-p-2\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"config.status === '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 === '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 === '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 === '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 </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-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Step group: {{ config.groupName }}\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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\">\n <cqa-step-renderer *ngFor=\"let step of config.steps\" [step]=\"step\"></cqa-step-renderer>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { LoopStepConfig, LoopIteration, ExecutionStepConfig, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-loop-step',\n templateUrl: './loop-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class LoopStepComponent extends BaseStepComponent implements OnInit {\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() loopType?: 'for' | 'while';\n @Input() iterations!: LoopIteration[];\n @Input() selectedIterationId?: string;\n @Input() defaultIteration?: 'first' | 'last';\n @Input() nestedSteps?: ExecutionStepConfig[];\n @Input() showViewAllIterations?: boolean;\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 // Config property for base class - built from individual inputs in ngOnInit\n override config!: LoopStepConfig;\n\n selectedIteration: LoopIteration | null = null;\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 type: 'loop',\n loopType: this.loopType,\n iterations: this.iterations,\n selectedIterationId: this.selectedIterationId,\n defaultIteration: this.defaultIteration,\n nestedSteps: this.nestedSteps,\n showViewAllIterations: this.showViewAllIterations,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as LoopStepConfig;\n\n super.ngOnInit();\n this.selectDefaultIteration();\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 }\n }\n\n selectDefaultIteration(): void {\n if (this.selectedIterationId) {\n this.selectedIteration = this.iterations.find(\n iter => iter.id === this.selectedIterationId\n ) || null;\n } else if (this.defaultIteration === 'last' && this.iterations.length > 0) {\n this.selectedIteration = this.iterations[this.iterations.length - 1];\n } else if (this.iterations.length > 0) {\n this.selectedIteration = this.iterations[0];\n }\n }\n\n onIterationChange(iterationId: string): void {\n this.selectedIteration = this.iterations.find(iter => iter.id === iterationId) || null;\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","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"config.status === '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 === '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 === '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 === '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 </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\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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]\">\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\" 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 [value]=\"selectedIteration?.id\"\n (change)=\"onIterationChange($any($event.target).value)\">\n <option *ngFor=\"let iteration of config.iterations\" [value]=\"iteration.id\">\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\">\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 <div\n *ngFor=\"let subStep of selectedIteration.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><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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\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\n <!-- Nested Steps -->\n <div *ngIf=\"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 <cqa-step-renderer *ngFor=\"let step of config.nestedSteps\" [step]=\"step\"></cqa-step-renderer>\n </div>\n </div>\n\n <!-- View All Iterations Link -->\n <div *ngIf=\"config.showViewAllIterations\" class=\"cqa-flex cqa-justify-end cqa-px-3 cqa-py-[10px]\">\n <a href=\"#\" (click)=\"onViewAllIterationsClick($event)\" class=\"cqa-text-[12px] 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 <!-- 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</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ConditionStepConfig, ConditionBranch, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-condition-step',\n templateUrl: './condition-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class ConditionStepComponent extends BaseStepComponent implements OnInit {\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() conditionText!: string;\n @Input() branches!: ConditionBranch[];\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: ConditionStepConfig;\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 type: 'condition',\n conditionText: this.conditionText,\n branches: this.branches,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as ConditionStepConfig;\n\n super.ngOnInit();\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","<div>\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)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\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\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Condition: {{ config.conditionText }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 <!-- Branch Buttons -->\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]\">\n <div\n *ngFor=\"let branch of config.branches\"\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\"\n [ngClass]=\"branch.executed \n ? 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]' \n : 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]'\">\n <div *ngIf=\"branch.executed\"><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=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>{{ branch.type.toUpperCase() }} ({{ branch.label }})</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\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><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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ config.stepNumber }}.{{ getSubStepIndex(branch.subSteps, subStep) }}. {{ subStep.description }}\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\" 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 <!-- 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</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ScreenshotData, LogEntry } from '../execution-step.models';\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 {\n @Input() screenshots?: ScreenshotData;\n @Input() logs?: LogEntry[];\n @Input() showFullLogsLink?: boolean = true;\n \n @Output() makeBaseline = new EventEmitter<void>();\n @Output() uploadBaseline = new EventEmitter<void>();\n @Output() analyze = new EventEmitter<void>();\n @Output() viewFullLogs = new EventEmitter<void>();\n\n onMakeBaseline(): void {\n console.log('Make current baseline clicked');\n this.makeBaseline.emit();\n }\n\n onUploadBaseline(): void {\n console.log('Upload baseline clicked');\n this.uploadBaseline.emit();\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\n","<div class=\"cqa-grid cqa-grid-cols-12 cqa-gap-4 cqa-w-full\">\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\">\n <div class=\"cqa-text-[10px] 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-min-h-[112px]\">\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 *ngIf=\"screenshots?.baseline\" [src]=\"screenshots.baseline\" 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-min-h-[112px]\">\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-min-h-[112px]\">\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)=\"onMakeBaseline()\"\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=\"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 Make current baseline\n </button>\n <button \n (click)=\"onUploadBaseline()\"\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=\"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 Upload baseline\n </button>\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\">\n <div class=\"cqa-text-[10px] 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-mb-4\">\n <div class=\"cqa-text-[11px] cqa-leading-[100%] cqa-text-[#737373]\">Console</div>\n \n <div *ngFor=\"let log of logs\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\" [ngClass]=\"getLogClass(log.level)\">\n {{ log.message }}\n </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]\">\n No logs available\n </div>\n </div>\n\n <a \n *ngIf=\"showFullLogsLink\"\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\">\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","import { Component, Input, OnInit } from '@angular/core';\nimport { FailedStepConfig, SubStep, FailureDetails, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-failed-step',\n templateUrl: './failed-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class FailedStepComponent extends BaseStepComponent implements OnInit {\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() subSteps!: SubStep[];\n @Input() failureDetails!: FailureDetails;\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 stepNumber: this.stepNumber,\n title: this.title,\n status: this.status,\n duration: this.duration,\n type: '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 onMakeBaseline(): void {\n console.log('Make current baseline clicked');\n }\n\n onUploadBaseline(): void {\n console.log('Upload baseline clicked');\n }\n\n onAnalyze(): void {\n console.log('Analyze clicked');\n }\n\n onViewFullLogs(): void {\n console.log('View full logs clicked');\n }\n}\n","<div>\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><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 }}. {{ config.title }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\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 [screenshots]=\"config.failureDetails.screenshots\"\n [logs]=\"config.failureDetails.logs\"\n (makeBaseline)=\"onMakeBaseline()\"\n (uploadBaseline)=\"onUploadBaseline()\"\n (analyze)=\"onAnalyze()\"\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, Input, OnInit } from '@angular/core';\nimport { AIAgentStepConfig, AIAgentAction, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.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' }\n})\nexport class AIAgentStepComponent extends BaseStepComponent implements OnInit {\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() prompt!: string;\n @Input() optimizedRun?: boolean;\n @Input() actionCount?: number;\n @Input() actions?: AIAgentAction[];\n @Input() selectedTabInput?: 'action-trace' | 'planner-timeline' | 'ai-reasoning';\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: AIAgentStepConfig;\n\n selectedTab: 'action-trace' | 'planner-timeline' | 'ai-reasoning' = 'action-trace';\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 type: 'ai-agent',\n prompt: this.prompt,\n optimizedRun: this.optimizedRun,\n actionCount: this.actionCount,\n actions: this.actions || [],\n selectedTab: this.selectedTabInput,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as AIAgentStepConfig;\n\n super.ngOnInit();\n this.selectedTab = this.config.selectedTab || 'action-trace';\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.prompt) {\n const content = `PROMPT\\n${this.prompt}`;\n this.copyToClipboard(content);\n }\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\n <!-- Lightbulb Icon and Step Number -->\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=\"#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></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-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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]\">\n AI Agent\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]\">\n {{ config.actionCount }} actions\n </span>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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\" 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-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" [innerHTML]=\"config.prompt\"></p>\n </div>\n <button class=\"cqa-p-1.5\" (click)=\"copyPrompt()\">\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.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-mb-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 }} actions</b> \n from previous runs\n </div>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <div\n *ngFor=\"let action of config.actions; let i = index\"\n class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-bg-[#F7FAFC]\" 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\"><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></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><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=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-bold cqa-text-gray-[#0B0B0B]\">{{ action.description }}</span>\n <span *ngIf=\"action.confidence\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] 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 </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"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-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\n </div>\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, OnInit } from '@angular/core';\nimport { ApiStepConfig, ApiAssertion, SubStep, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n selector: 'cqa-api-step',\n templateUrl: './api-step.component.html',\n styleUrls: [],\n host: { class: 'cqa-ui-root' }\n})\nexport class ApiStepComponent extends BaseStepComponent implements OnInit {\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() method!: string;\n @Input() endpoint!: string;\n @Input() statusCode!: number;\n @Input() responseTime!: number;\n @Input() requestBody?: any;\n @Input() responseBody?: any;\n @Input() assertions?: ApiAssertion[];\n @Input() initialActions?: SubStep[];\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: ApiStepConfig;\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 type: '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 assertions: this.assertions,\n initialActions: this.initialActions,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as ApiStepConfig;\n\n super.ngOnInit();\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 });\n }\n\n copyRequestBody(): void {\n if (this.requestBody) {\n const formattedJson = this.formatJson(this.requestBody);\n this.copyToClipboard(formattedJson);\n }\n }\n\n copyResponseBody(): void {\n if (this.responseBody) {\n const formattedJson = this.formatJson(this.responseBody);\n this.copyToClipboard(formattedJson);\n }\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\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=\"#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 <!-- 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\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 -->\n <div *ngIf=\"config.initialActions && config.initialActions.length > 0\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-ml-9\">\n <div\n *ngFor=\"let action of config.initialActions\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\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=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">{{ action.description }}</span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">{{ formatDuration(action.duration) }}</span>\n </div>\n </div>\n\n <!-- Request Summary Card -->\n <div 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 <button 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 </div>\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\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 [ngClass]=\"getStatusBadgeClass()\" 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]\">\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 Bodies -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-mt-4\">\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 <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 </div>\n <pre *ngIf=\"config.requestBody\" class=\"cqa-h-full cqa-text-[11px] cqa-leading-[13px] cqa-text-[#0B0B0B] cqa-bg-[#F8F8F8] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px]\">{{ formatJson(config.requestBody) }}</pre>\n <a *ngIf=\"config.requestBody\" href=\"#\" class=\"cqa-text-[12px] cqa-leading-[15px] cqa-no-underline cqa-text-primary cqa-font-medium 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\"><path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n View full request\n </a>\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 <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 </div>\n <pre *ngIf=\"config.responseBody\" [ngClass]=\"{'cqa-bg-[#FEF2F2] cqa-text-[#C10007]': config.statusCode >= 400}\" class=\"cqa-h-full cqa-text-[11px] cqa-leading-[13px] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px]\">{{ 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\" 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-items-start 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\"\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-[10px] cqa-leading-[13px]\" \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\">\n <div>\n <span>Expected:</span>\n <span [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 [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 <!-- 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</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FileDownloadStepConfig, StepStatus, TimingBreakdown } 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' }\n})\nexport class FileDownloadStepComponent extends BaseStepComponent implements OnInit {\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() fileName!: string;\n @Input() fileType!: string;\n @Input() fileSize?: string;\n @Input() filePath?: string;\n @Input() downloaded!: boolean;\n\n // Config property for base class - built from individual inputs in ngOnInit\n override config!: FileDownloadStepConfig;\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 type: 'file-download',\n fileName: this.fileName,\n fileType: this.fileType,\n fileSize: this.fileSize,\n filePath: this.filePath,\n downloaded: this.downloaded,\n timingBreakdown: this.timingBreakdown,\n expanded: this.expanded,\n } as FileDownloadStepConfig;\n\n super.ngOnInit();\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 // Handle download action\n console.log('Download file:', this.fileName);\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 copyFilePath(): void {\n if (this.filePath) {\n this.copyToClipboard(this.filePath);\n }\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\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-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 (click)=\"onDownload()\"\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 <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 <button class=\"cqa-px-1.5 xqa-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 </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, OnInit } from '@angular/core';\nimport { DocumentVerificationStepConfig, ExtractedField, VerificationCheck, StepStatus, TimingBreakdown } 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' }\n})\nexport class DocumentVerificationStepComponent extends BaseStepComponent implements OnInit {\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\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 type: '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 copyToClipboard(text: string): void {\n navigator.clipboard.writeText(text).then(() => {\n console.log('Copied to clipboard:', text);\n });\n }\n}\n","<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><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\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-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. {{ config.title }}\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 <span class=\"cqa-text-[9px] cqa-leading-[11px] 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 } from '@angular/core';\nimport { PrerequisiteItem, StepStatus } from '../execution-step.models';\n\nexport type IconType = 'folder' | 'loop' | 'custom';\n\nexport interface IconConfig {\n type: IconType;\n svg?: string; // Custom SVG string when type is 'custom'\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' }\n})\nexport class MainStepCollapseComponent implements OnInit {\n @Input() title: string = 'Prerequisites';\n @Input() items!: PrerequisiteItem[];\n @Input() expanded: boolean = true;\n @Input() icon?: IconConfig;\n @Output() viewSteps = new EventEmitter<PrerequisiteItem>();\n\n isExpanded: boolean = true;\n\n ngOnInit(): void {\n this.isExpanded = this.expanded;\n }\n\n toggle(): void {\n this.isExpanded = !this.isExpanded;\n }\n\n formatDuration(seconds: number): string {\n if (seconds < 1) {\n return `${(seconds * 1000).toFixed(0)}ms`;\n }\n return `${seconds.toFixed(1)}s`;\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\n onViewSteps(item: PrerequisiteItem, event: Event): void {\n event.preventDefault();\n this.viewSteps.emit(item);\n }\n}\n","<!-- Header -->\n<div\nclass=\"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\"\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\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></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 <!-- Default Chain-Link Icon -->\n <!-- <div *ngIf=\"!icon || icon.type === 'custom'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.5 6.5L6.5 5.5M9.5 5.5L10.5 6.5M6.5 10.5L5.5 9.5M10.5 9.5L9.5 10.5M3 8C3 5.79086 4.79086 4 7 4H9C11.2091 4 13 5.79086 13 8C13 10.2091 11.2091 12 9 12H7C4.79086 12 3 10.2091 3 8Z\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div> -->\n\n <div><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></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 -->\n <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ items.length }}\n </span>\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<div\n *ngFor=\"let item of items\"\n class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n \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\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_48_121)\"><path 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\" stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g><defs><clipPath id=\"clip0_48_121\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#EF4444\"/>\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" 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\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" 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]\">\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 <!-- Duration with Clock Icon -->\n <div 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\"><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=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></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 -->\n <a\n href=\"#\"\n (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 View steps\n <svg width=\"16\" height=\"15\" viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" fill=\"#3F43EE\"/></svg>\n </a>\n </div>\n</div>\n</div>","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, AfterViewInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\n\nexport interface StepMarker {\n cumulativeDuration: number;\n result: 'SUCCESS' | 'FAILURE';\n}\n\ntype SegmentOption = {\n label: string;\n value: string;\n icon?: string;\n};\n@Component({\n selector: 'cqa-simulator',\n templateUrl: './simulator.component.html',\n styleUrls: []\n})\nexport class SimulatorComponent implements AfterViewInit, OnDestroy, OnChanges {\n\n @Input() videoUrl: string = '';\n @Input() videoCurrentDuration: number = 0;\n @Input() stepMarkers: StepMarker[] = [];\n @Input() screenShotUrl: string = '';\n @Input() platformName: string = 'Web - Chrome';\n @Input() platformType: 'browser' | 'device' = 'browser';\n @Input() isLive: boolean = false;\n\n @Output() videoTimeUpdate = new EventEmitter<number>();\n @Output() videoPlay = new EventEmitter<void>();\n @Output() videoPause = new EventEmitter<void>();\n\n @ViewChild('vplayer') vplayer!: ElementRef<HTMLVideoElement>;\n @ViewChild('timelineBar') timelineBar!: ElementRef<HTMLDivElement>;\n\n progress = 0;\n dragging = false;\n isPlaying: boolean = false;\n isFullScreen: boolean = false;\n currentView: string = 'video';\n\n segments: SegmentOption[] = [\n { label: 'Screenshots', value: 'screenshots', icon: 'photo' },\n { label: 'Video', value: 'video', icon: 'videocam' },\n ];\n\n private videoEventListenerCleanup: (() => void) | null = null;\n private lastSetDuration: number = -1;\n\n ngAfterViewInit(): void {\n this.attachVideoListeners();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['videoCurrentDuration'] && !changes['videoCurrentDuration'].firstChange) {\n const newDuration = changes['videoCurrentDuration'].currentValue;\n if (newDuration !== this.lastSetDuration && this.vplayer?.nativeElement) {\n this.seekToTime(newDuration);\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.videoEventListenerCleanup) {\n this.videoEventListenerCleanup();\n }\n }\n\n seekToTime(milliseconds: number): void {\n if (!this.vplayer?.nativeElement || !this.vplayer.nativeElement.duration) return;\n \n const seconds = milliseconds / 1000;\n const video = this.vplayer.nativeElement;\n \n const targetTime = Math.max(0, Math.min(seconds, video.duration));\n video.currentTime = targetTime;\n this.lastSetDuration = milliseconds;\n\n if (this.isPlaying) {\n video.play().catch(err => console.error('Play failed:', err));\n }\n }\n\n togglePlay(): void {\n if (!this.vplayer?.nativeElement) return;\n\n if (this.isPlaying) {\n this.vplayer.nativeElement.pause();\n this.isPlaying = false;\n this.videoPause.emit();\n } else {\n this.vplayer.nativeElement.play();\n this.isPlaying = true;\n this.videoPlay.emit();\n }\n }\n\n onTimelineClick(event: MouseEvent): void {\n if (!this.timelineBar?.nativeElement || !this.vplayer?.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 const targetTimeSeconds = percent * this.vplayer.nativeElement.duration;\n this.vplayer.nativeElement.currentTime = targetTimeSeconds;\n this.lastSetDuration = targetTimeSeconds * 1000;\n }\n\n startDrag(): void {\n this.dragging = true;\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 this.progress = percent * 100;\n }\n\n stopDrag(): void {\n if (!this.dragging || !this.vplayer?.nativeElement) return;\n\n this.dragging = false;\n const targetTimeSeconds = (this.progress / 100) * this.vplayer.nativeElement.duration;\n this.vplayer.nativeElement.currentTime = targetTimeSeconds;\n this.lastSetDuration = targetTimeSeconds * 1000;\n }\n\n onVideoMetadataLoaded(): void {\n this.attachVideoListeners();\n }\n\n onVideoCanPlay(): void {\n this.attachVideoListeners();\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 if (!this.dragging) {\n const percent = (currentMs / (video.duration * 1000)) * 100;\n this.progress = Math.min(100, Math.max(0, percent));\n this.videoTimeUpdate.emit(currentMs);\n }\n };\n\n video.addEventListener('timeupdate', handler);\n\n this.videoEventListenerCleanup = () => {\n video.removeEventListener('timeupdate', handler);\n };\n }, 100);\n }\n\n getStepLeftPosition(step: StepMarker): number {\n if (!this.vplayer?.nativeElement?.duration) return 0;\n return (step.cumulativeDuration / (this.vplayer.nativeElement.duration * 1000)) * 100;\n }\n\n getStepColor(step: StepMarker): string {\n return step.result === 'SUCCESS' ? '#28a745' : '#dc3545';\n }\n\n toggleFullScreen(): void {\n this.isFullScreen = !this.isFullScreen;\n }\n\n onSegmentChange(value: string): void {\n this.currentView = value;\n }\n\n formatTime(seconds: number): string {\n if (!seconds || isNaN(seconds)) return '00:00';\n \n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n \n return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\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\">\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=\"platformType === '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=\"platformType === '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\">{{ platformName }}</p>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\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 </div>\n </div>\n </div>\n <div class=\"cqa-w-full cqa-bg-[#F3F4F6] cqa-h-[calc(100%-41px)]\">\n <div *ngIf=\"currentView === 'video'\" class=\"cqa-h-full cqa-flex cqa-flex-col cqa-justify-center\">\n <div class=\"cqa-w-full cqa-py-4 cqa-flex cqa-items-center cqa-max-h-[calc(100%-35px)]\" *ngIf=\"videoUrl\" [ngClass]=\"{'!cqa-h-full': platformType === 'device'}\">\n <video\n #vplayer\n class=\"cqa-object-contain cqa-w-full cqa-min-h-[250px] cqa-max-h-full cqa-block cqa-bg-black\"\n [src]=\"videoUrl\"\n type=\"video/webm\"\n (loadedmetadata)=\"onVideoMetadataLoaded()\"\n (canplay)=\"onVideoCanPlay()\"\n ></video>\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=\"!videoUrl\">\n No video recording found\n </div>\n \n <div class=\"cqa-px-2 cqa-py-2 cqa-bg-white\" style=\"border-top: 1px solid #E5E7EB;\" *ngIf=\"videoUrl\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button \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 <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 \n <span class=\"cqa-text-[#9CA3AF] cqa-text-[9px] cqa-font-normal cqa-whitespace-nowrap cqa-select-none cqa-mr-[20px]\">\n {{ formatTime(vplayer?.nativeElement?.currentTime || 0) }}\n </span>\n \n <div \n #timelineBar\n class=\"cqa-relative cqa-h-1 cqa-bg-gray-200 cqa-rounded-full cqa-cursor-pointer cqa-flex-1\"\n (click)=\"onTimelineClick($event)\" \n (mousemove)=\"onDrag($event)\"\n (mouseup)=\"stopDrag()\" \n (mouseleave)=\"stopDrag()\">\n \n <div \n *ngFor=\"let step of stepMarkers\" \n class=\"cqa-absolute cqa-w-1 cqa-h-full cqa-top-0 cqa-rounded-sm\"\n [style.left.%]=\"getStepLeftPosition(step)\"\n [style.background]=\"getStepColor(step)\"\n style=\"pointer-events: none; z-index: 20;\">\n </div>\n \n <div \n class=\"cqa-absolute cqa-left-0 cqa-top-0 cqa-h-full cqa-bg-green-500 cqa-rounded-full cqa-transition-[width] cqa-duration-100\"\n [style.width.%]=\"progress\"\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-green-600 cqa-rounded-full cqa-cursor-grab active:cqa-cursor-grabbing cqa-shadow-md\"\n [style.left.%]=\"progress\"\n style=\"transform: translate(-50%, -50%); z-index: 10;\"\n (mousedown)=\"startDrag()\">\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"currentView === 'screenshots'\" class=\"cqa-h-full\">\n <div class=\"cqa-w-full cqa-py-4 cqa-h-full cqa-flex cqa-items-center\" *ngIf=\"screenShotUrl\">\n <img\n [src]=\"screenShotUrl\"\n alt=\"Screenshot\"\n class=\"cqa-object-contain cqa-w-full cqa-max-h-full cqa-block cqa-bg-black cqa-mx-auto\"\n />\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 </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\">\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, Input } 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';\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\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}","<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-text-[#3f43ee]\" [ngClass]=\"{\n 'cqa-text-xs': isSmall,\n 'cqa-text-sm': !isSmall\n }\">\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 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-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 <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, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\nexport type ImageViewType = 'baseline' | 'current' | 'difference';\n\n@Component({\n selector: 'cqa-visual-difference-modal',\n templateUrl: './visual-difference-modal.component.html',\n styleUrls: []\n})\nexport class VisualDifferenceModalComponent implements OnChanges {\n @Input() baselineUrl: string = '';\n @Input() currentUrl: string = '';\n @Input() differenceUrl: string = '';\n @Input() title: string = 'Visual Difference';\n @Input() subtitle: string = 'Comparing Baseline vs. Current Execution';\n @Input() isOpen: boolean = false;\n @Output() close = new EventEmitter<void>();\n\n currentView: ImageViewType = 'baseline';\n baselineImageError: boolean = false;\n currentImageError: boolean = false;\n differenceImageError: boolean = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['baselineUrl']) {\n this.baselineImageError = false;\n }\n if (changes['currentUrl']) {\n this.currentImageError = false;\n }\n if (changes['differenceUrl']) {\n this.differenceImageError = false;\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.close.emit();\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 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 *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-bg-white cqa-rounded-lg cqa-shadow-xl cqa-flex cqa-flex-col cqa-max-w-[90vw] cqa-h-[70vh] cqa-w-full cqa-overflow-hidden\"\n style=\"max-width: 1200px;\"\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</div>\n\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 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\" 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<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, 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 { EmptyStateConfig } from '../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\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 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 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 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: 'UNCHANGED' | 'STATUS_CHANGED' | 'TIMING_CHANGED' | 'ADDED' | 'REMOVED';\n}\n\nexport interface ComparisonResponse {\n summary: ComparisonSummary;\n stepsComparison: StepComparison[];\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() isLoadingRuns: boolean = false;\n @Input() hasMoreRuns: boolean = false;\n @Input() isComparingRuns: boolean = false;\n \n @Output() searchRuns = new EventEmitter<SearchRequest>();\n @Output() loadMoreRuns = new EventEmitter<string>();\n @Output() compareRuns = new EventEmitter<CompareRequest>();\n\n form!: FormGroup;\n runASelectConfig!: DynamicSelectFieldConfig;\n runBSelectConfig!: DynamicSelectFieldConfig;\n\n selectedRunA?: RunData;\n selectedRunB?: RunData;\n comparisonSummary?: ComparisonSummary;\n stepComparisons: StepComparison[] = [];\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 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 }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['runs'] && !changes['runs'].firstChange) {\n this.setupSelectConfigs();\n this.cdr.markForCheck();\n }\n \n if (changes['comparisonData'] && this.comparisonData) {\n this.handleComparisonData();\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\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 id: run.id,\n value: run.id,\n label: this.formatRunLabel(run),\n name: this.formatRunLabel(run)\n }));\n this.lastRuns = this.runs;\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 searchable: true,\n serverSearch: 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 searchable: true,\n serverSearch: 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.cdr.markForCheck();\n }\n\n private convertToRunData(data: TestCaseResultData): RunData {\n const device = data.testDeviceResult?.testDeviceSettings?.deviceName || \n data.testDeviceResult?.testDeviceSettings?.platform || \n 'Unknown Device';\n const browser = data.testDeviceResult?.testDeviceSettings?.browser || 'Unknown Browser';\n const platform = data.testDeviceResult?.testDeviceSettings?.platform || 'Unknown 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 this.tableColumns = [\n {\n fieldId: 'step',\n fieldName: 'Step',\n fieldValue: 'stepTitle',\n isShow: true,\n weight: 3,\n render: (row: StepComparison) => {\n return `\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B]\">${row.stepTitle}</span>\n </div>\n `;\n }\n },\n {\n fieldId: 'runA',\n fieldName: 'Run A',\n isShow: true,\n weight: 1.5,\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: 'Run B',\n isShow: true,\n weight: 1.5,\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 render: (row: StepComparison) => {\n const changeLabels: Record<string, string> = {\n 'UNCHANGED': 'Unchanged',\n 'STATUS_CHANGED': 'Status Changed',\n 'TIMING_CHANGED': 'Timing Changed',\n 'ADDED': 'Added',\n 'REMOVED': 'Removed'\n };\n const changeColors: Record<string, string> = {\n 'UNCHANGED': '#6B7280',\n 'STATUS_CHANGED': '#F59E0B',\n 'TIMING_CHANGED': '#3B82F6',\n 'ADDED': '#10B981',\n 'REMOVED': '#EF4444'\n };\n const changeBgColors: Record<string, string> = {\n 'UNCHANGED': '#F3F4F6',\n 'STATUS_CHANGED': '#FEF3C7',\n 'TIMING_CHANGED': '#DBEAFE',\n 'ADDED': '#D1FAE5',\n 'REMOVED': '#FEE2E2'\n };\n\n const label = changeLabels[row.change] || row.change;\n const color = changeColors[row.change] || '#6B7280';\n const bgColor = changeBgColors[row.change] || '#F3F4F6';\n\n return `\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-semibold cqa-w-max\" \n style=\"background-color: ${bgColor}; color: ${color};\">\n ${label}\n </span>\n `;\n }\n }\n ];\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 formatDuration(milliseconds: number): string {\n const seconds = milliseconds / 1000;\n if (seconds < 60) {\n return `${seconds.toFixed(1)}s`;\n }\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${minutes}m ${remainingSeconds}s`;\n }\n\n private handleComparisonData(): void {\n if (!this.comparisonData) return;\n\n this.comparisonSummary = this.comparisonData.summary;\n this.stepComparisons = this.comparisonData.stepsComparison;\n this.pageIndex = 0;\n this.cdr.markForCheck();\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.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: block; width: 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-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 *ngIf=\"selectedRunA\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runAStatusBgColor\"\n [style.border-color]=\"runAStatusBorderColor\">\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 || '—' }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n </div>\n </div>\n </div>\n \n <div *ngIf=\"selectedRunB\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runBStatusBgColor\"\n [style.border-color]=\"runBStatusBorderColor\">\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 || '—' }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"cqa-w-full cqa-flex cqa-justify-center\">\n <cqa-button \n variant=\"filled\" \n [disabled]=\"!canCompare\"\n (click)=\"onCompareClick()\">\n {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n </cqa-button>\n </div>\n </div>\n\n <div *ngIf=\"showComparison && comparisonSummary && stepComparisons && stepComparisons.length > 0\" \n class=\"cqa-bg-white cqa-pt-3 cqa-pb-0 sm:cqa-pb-1 sm:cqa-pt-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\">\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 xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M12.6759 10.5003L8.00919 2.33363C7.90743 2.15408 7.75987 2.00474 7.58156 1.90083C7.40325 1.79693 7.20056 1.74219 6.99419 1.74219C6.78781 1.74219 6.58513 1.79693 6.40681 1.90083C6.2285 2.00474 6.08094 2.15408 5.97919 2.33363L1.31252 10.5003C1.20967 10.6784 1.15574 10.8806 1.15619 11.0863C1.15665 11.2919 1.21147 11.4939 1.31511 11.6715C1.41875 11.8492 1.56752 11.9963 1.74634 12.0979C1.92516 12.1996 2.12767 12.2521 2.33335 12.2503H11.6667C11.8714 12.2501 12.0724 12.196 12.2496 12.0935C12.4268 11.9911 12.5739 11.8438 12.6762 11.6664C12.7784 11.4891 12.8322 11.288 12.8322 11.0833C12.8321 10.8786 12.7782 10.6776 12.6759 10.5003Z\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 5.25V7.58333\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 9.91699H7.00583\" stroke=\"#FD9A00\" 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-[#E17100]\">{{ 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\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=\"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=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#2B7FFF\" 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-[#155DFC]\">{{ comparisonSummary.timing }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Timing Changed</span>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"stepComparisons\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\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\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(milliseconds: number): string {\n const seconds = milliseconds / 1000;\n if (seconds < 60) {\n return `${seconds.toFixed(1)}s`;\n }\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${minutes}m ${remainingSeconds}s`;\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 [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, Output, EventEmitter } 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}\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 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%;\">\n <div class=\"cqa-h-[200px] cqa-overflow-y-auto cqa-bg-[#FEF2F2] cqa-p-[17px] cqa-rounded-lg cqa-overflow-hidden cqa-flex cqa-flex-col cqa-gap-3\" style=\"border: 1px solid #FECACA;\">\n <div>\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]\">Error: {{ 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>\n\n <div class=\"cqa-h-[114px] 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-[85px] cqa-max-h-[85px] cqa-overflow-y-auto cqa-font-medium\">\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-[85px] 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 { 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() 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 [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\"\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]=\"inputSizeClasses\"\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 } 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%;\">\n <div class=\"cqa-h-[200px] 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\" *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 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';\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\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\n @Output() buttonClick = new EventEmitter<string>();\n @Output() closeModal = 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 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 \n","<div \n *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-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2\"\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-4\"\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\">\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 <div *ngIf=\"shouldShowLastCompletedStep\" class=\"cqa-my-4 cqa-p-[17px] cqa-rounded-[10px]\" style=\"border: 1px solid #E5E7EB;\">\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]\">\n {{ lastCompletedStep }}\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 i = index\">\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 { NgModule, forwardRef, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\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 { 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 { OverlayModule, OverlayContainer } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ButtonComponent } from './button/button.component';\nimport { SearchBarComponent } from './search-bar/search-bar.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 { 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 { 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 { 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 { 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 { SelfHealAnalysisComponent } from './execution-screen/self-heal-analysis/self-heal-analysis.component';\nimport { AIAgentStepComponent } from './execution-screen/ai-agent-step/ai-agent-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 { 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 { 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 { 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 { AiReasoningComponent } from './ai-reasoning/ai-reasoning.component';\nimport { ExecutionResultModalComponent } from './execution-result-modal/execution-result-modal.component';\n\n@NgModule({\n declarations: [\n ButtonComponent,\n SearchBarComponent,\n SegmentControlComponent,\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 CoverageModuleCardComponent,\n TestDistributionCardComponent,\n FailedTestCasesCardComponent,\n DynamicSelectFieldComponent,\n SelectedFiltersComponent,\n InsightCardComponent,\n BadgeComponent,\n DropdownButtonComponent,\n HeatErrorMapCellComponent,\n EmptyStateComponent,\n TableTemplateComponent,\n FullTableLoaderComponent,\n TableDataLoaderComponent,\n BasicStepComponent,\n StepRendererComponent,\n StepGroupComponent,\n LoopStepComponent,\n ConditionStepComponent,\n FailedStepComponent,\n SelfHealAnalysisComponent,\n AIAgentStepComponent,\n ApiStepComponent,\n FileDownloadStepComponent,\n DocumentVerificationStepComponent,\n MainStepCollapseComponent,\n VisualComparisonComponent,\n SimulatorComponent,\n ConsoleAlertComponent,\n AiDebugAlertComponent,\n NetworkRequestComponent,\n RunHistoryCardComponent,\n VisualDifferenceModalComponent,\n ConfigurationCardComponent,\n CompareRunsComponent,\n IterationsLoopComponent,\n FailedStepCardComponent,\n CustomInputComponent,\n AiReasoningComponent,\n ExecutionResultModalComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatIconModule,\n MatMenuModule,\n MatButtonModule,\n MatFormFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatCheckboxModule,\n MatRadioModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n OverlayModule,\n PortalModule\n ],\n exports: [\n ButtonComponent,\n SearchBarComponent,\n SegmentControlComponent,\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 CoverageModuleCardComponent,\n TestDistributionCardComponent,\n FailedTestCasesCardComponent,\n DynamicSelectFieldComponent,\n SelectedFiltersComponent,\n InsightCardComponent,\n BadgeComponent,\n DropdownButtonComponent,\n HeatErrorMapCellComponent,\n EmptyStateComponent,\n TableTemplateComponent,\n FullTableLoaderComponent,\n TableDataLoaderComponent,\n BasicStepComponent,\n StepRendererComponent,\n StepGroupComponent,\n LoopStepComponent,\n ConditionStepComponent,\n FailedStepComponent,\n SelfHealAnalysisComponent,\n AIAgentStepComponent,\n ApiStepComponent,\n FileDownloadStepComponent,\n DocumentVerificationStepComponent,\n MainStepCollapseComponent,\n VisualComparisonComponent,\n SimulatorComponent,\n ConsoleAlertComponent,\n AiDebugAlertComponent,\n NetworkRequestComponent,\n RunHistoryCardComponent,\n VisualDifferenceModalComponent,\n ConfigurationCardComponent,\n CompareRunsComponent,\n IterationsLoopComponent,\n FailedStepCardComponent,\n CustomInputComponent,\n AiReasoningComponent,\n ExecutionResultModalComponent\n ],\n providers: [\n { provide: OverlayContainer, useClass: TailwindOverlayContainer },\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 ['failed', FailedStepComponent],\n ['ai-agent', AIAgentStepComponent],\n ['api', ApiStepComponent],\n ['file-download', FileDownloadStepComponent],\n ['document-verification', DocumentVerificationStepComponent],\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 { 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1.ButtonComponent","i1","i2.FullTableLoaderComponent","i3.TableDataLoaderComponent","i4","i5.DynamicCellContainerDirective","i5","i2.DaterangepickerDirective","i2.DynamicSelectFieldComponent","i3.DaterangepickerComponent","i4.ButtonComponent","i6","i1.MetricsBlockComponent","i2.EmptyStateComponent","getMetadataColorStyle","i1.BadgeComponent","i3.ButtonComponent","i1.SearchBarComponent","i2.ButtonComponent","i3.ColumnVisibilityComponent","i4.SelectedFiltersComponent","i5.DynamicFilterComponent","i6.DynamicTableComponent","i7.EmptyStateComponent","i8.PaginationComponent","i9.TableActionToolbarComponent","i10","i1.SelfHealAnalysisComponent","i1.StepRendererComponent","i1.VisualComparisonComponent","i2.SegmentControlComponent","i5.TableTemplateComponent","i1.TableTemplateComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUa,eAAe,CAAA;AAL5B,IAAA,WAAA,GAAA;AAMW,QAAA,IAAO,CAAA,OAAA,GAAkB,QAAQ,CAAC;AAClC,QAAA,IAAO,CAAA,OAAA,GAAe,IAAI,CAAC;AAC3B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAEtB,QAAA,IAAY,CAAA,YAAA,GAAoB,OAAO,CAAC;AACxC,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAE/B,QAAA,IAAI,CAAA,IAAA,GAAkC,QAAQ,CAAC;;AAQ/C,QAAA,IAAe,CAAA,eAAA,GAAyC,OAAO,CAAC;AAC/D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAc,CAAC;;AAGnD,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAC3B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAC3B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;KA0O5B;AAxOC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACpB;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;YAClB,iBAAiB;YACjB,kBAAkB;YAClB,oBAAoB;YACpB,iBAAiB;YACjB,YAAY;SACb,CAAC;QAEF,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC5C,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAChC,SAAA;;AAGD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAEhD,QAAA,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACvG;AAED,IAAA,IAAY,WAAW,GAAA;QACrB,QAAQ,IAAI,CAAC,OAAO;AAClB,YAAA,KAAK,IAAI;gBACP,OAAO,CAAC,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;AACrG,YAAA,KAAK,IAAI;gBACP,OAAO,CAAC,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC;AACvG,YAAA,KAAK,IAAI,CAAC;AACV,YAAA;gBACE,OAAO,CAAC,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAC3G,SAAA;KACF;IAEO,iBAAiB,GAAA;QACvB,MAAM,OAAO,GAAa,EAAE,CAAC;AAE7B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;YAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACtC,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,EAAE;;YAExC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;AAC/F,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;gBAC9F,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACjC,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;AAClG,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,YAAY,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,2CAA2C,CAAC,CAAC;AACxJ,iBAAA;AAAM,qBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;oBAC3C,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;AACjG,iBAAA;AAAM,qBAAA;oBACL,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAC1F,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;YAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;AACvD,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;gBACtD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;AACtD,oBAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACxC,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AACzD,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,2CAA2C,CAAC,CAAC;AACzF,iBAAA;qBAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,2EAA2E,CAAC,CAAC;AACrH,iBAAA;qBAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,2EAA2E,CAAC,CAAC;AACzH,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,2EAA2E,CAAC,CAAC;AACrH,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,2EAA2E,CAAC,CAAC;AACjH,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAC5C,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,IAAI,SAAS,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AAC1D,gBAAA,OAAO,cAAc,CAAC;AACvB,aAAA;AACD,YAAA,OAAO,oBAAoB,CAAC;AAC7B,SAAA;QAED,QAAQ,IAAI,CAAC,OAAO;AAClB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,0BAA0B,CAAC;AACpC,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,UAAU;gBACb,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;AACtD,oBAAA,OAAO,yBAAyB,CAAC;AAClC,iBAAA;AACD,gBAAA,OAAO,gBAAgB,CAAC;AAC1B,YAAA,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,wBAAwB,CAAC;AAClC,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,cAAc,CAAC;AACxB,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACF;IAGD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,SAAA;KACF;IAGD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAGD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,SAAA;KACF;IAGD,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAGD,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,SAAA;KACF;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;AAED,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,IAAI,YAAY,GAAA;QACd,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,CAAG,EAAA,SAAS,CAAI,CAAA,EAAA,IAAI,CAAC,YAAY,CAAA,CAAE,GAAG,SAAS,CAAC;KAC5E;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC;AACpF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC;QAChF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAE5C,QAAQ,IAAI,CAAC,OAAO;AAClB,YAAA,KAAK,IAAI;AACP,gBAAA,IAAI,mBAAmB;AAAE,oBAAA,OAAO,2BAA2B,CAAC;AAC5D,gBAAA,IAAI,iBAAiB;AAAE,oBAAA,OAAO,2BAA2B,CAAC;AAC1D,gBAAA,IAAI,WAAW;AAAE,oBAAA,OAAO,cAAc,CAAC;AACvC,gBAAA,IAAI,WAAW;AAAE,oBAAA,OAAO,cAAc,CAAC;AACvC,gBAAA,OAAO,cAAc,CAAC;AAExB,YAAA,KAAK,IAAI;AACP,gBAAA,IAAI,mBAAmB;AAAE,oBAAA,OAAO,6BAA6B,CAAC;AAC9D,gBAAA,IAAI,iBAAiB;AAAE,oBAAA,OAAO,6BAA6B,CAAC;AAC5D,gBAAA,IAAI,WAAW;AAAE,oBAAA,OAAO,eAAe,CAAC;AACxC,gBAAA,IAAI,WAAW;AAAE,oBAAA,OAAO,eAAe,CAAC;AACxC,gBAAA,OAAO,eAAe,CAAC;AAEzB,YAAA,KAAK,IAAI,CAAC;AACV,YAAA;AACE,gBAAA,IAAI,mBAAmB;AAAE,oBAAA,OAAO,6BAA6B,CAAC;AAC9D,gBAAA,IAAI,iBAAiB;AAAE,oBAAA,OAAO,6BAA6B,CAAC;AAC5D,gBAAA,IAAI,WAAW;AAAE,oBAAA,OAAO,eAAe,CAAC;AACxC,gBAAA,IAAI,WAAW;AAAE,oBAAA,OAAO,eAAe,CAAC;AACxC,gBAAA,OAAO,eAAe,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,IAAI,WAAW,GAAA;QACb,QAAQ,IAAI,CAAC,OAAO;AAClB,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,8CAA8C,CAAC;AACxD,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,8CAA8C,CAAC;AACxD,YAAA,KAAK,IAAI,CAAC;AACV,YAAA;AACE,gBAAA,OAAO,8CAA8C,CAAC;AACzD,SAAA;KACF;;4GA/PU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,kkBCV5B,y3BA+BM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDrBO,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,y3BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKb,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACO,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACD,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACI,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAqJP,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAQ1B,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAO1B,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,WAAW,CAAA;gBAQzB,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,CAAA;gBAMvB,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,CAAA;gBAQrB,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM,CAAA;;;MErMT,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;;AASW,QAAA,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC;;AAGvB,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;;AAGX,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;;AAGjB,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;;AAGjB,QAAA,IAAS,CAAA,SAAA,GAAG,QAAQ,CAAC;;AAGrB,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;;AAGlB,QAAA,IAAI,CAAA,IAAA,GAAkB,IAAI,CAAC;;AAG3B,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;;AAGjB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;;AAGzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;;AAGpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE7C,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAWP,IAAA,CAAA,YAAY,GAAkC;AACrD,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,EAAE,EAAE,eAAe;SACpB,CAAC;KA2BH;AAxCC,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE;YACnE,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AACrD,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,UAAU,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC5B,aAAA;AACF,SAAA;KACF;AAQD,IAAA,OAAO,CAAC,KAAY,EAAA;;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC,CAAC;AACvD,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACxC;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;QACnB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;KAC1C;IAED,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;YAC3C,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;;+GA5EU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+XCV/B,owEAoCM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD1BO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGpB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,owEAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKrB,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAGG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAGG,OAAO,EAAA,CAAA;sBAAhB,MAAM;;;MEdI,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,QAAQ,GAAoB;AACnC,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE;AAC5C,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE;SAC7C,CAAC;AAOO,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AAKnD,QAAA,IAAc,CAAA,cAAA,GAA2B,EAAE,CAAC;AAC5C,QAAA,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;KAiO1B;AA9NC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,WAAW,GAAA;;AACT,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,kDAAI,CAAC;KACxC;IAED,YAAY,CAAC,MAAc,EAAE,MAAqB,EAAA;QAChD,OAAO,MAAM,CAAC,KAAK,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,MAAqB,EAAA;AAC9B,QAAA,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;KACpC;IAED,MAAM,CAAC,MAAqB,EAAE,KAAa,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;YACpC,OAAO;AACR,SAAA;AAED,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,SAAS,CAAC,KAAoB,EAAE,YAAoB,EAAA;QAClD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;QAED,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY,CAAC;AAClB,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACpC,MAAM;AACR,YAAA,KAAK,WAAW,CAAC;AACjB,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACrC,MAAM;AACR,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM;AACR,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;AACR,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;gBACvD,MAAM;AACR,YAAA;gBACE,MAAM;AACT,SAAA;KACF;IAEO,aAAa,CAAC,IAAY,EAAE,UAAkB,EAAA;AACpD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAChD,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO;AACR,SAAA;QAED,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,mBAAmB,IAAI,CAAC,GAAG,mBAAmB,GAAG,aAAa,CAAC;AACjF,QAAA,MAAM,YAAY,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;AACxF,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;KACtD;IAEO,kBAAkB,GAAA;AACxB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAChD,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAEO,iBAAiB,GAAA;AACvB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAChD,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAEO,iBAAiB,GAAA;QACvB,OAAO,IAAI,CAAC,QAAQ;AACjB,aAAA,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3C,aAAA,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;aACxC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;KAC9B;AAEO,IAAA,gBAAgB,CAAC,cAAwB,EAAA;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrG,IAAI,OAAO,IAAI,CAAC,EAAE;AAChB,YAAA,OAAO,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACV;AAED;;;AAGG;IACK,mBAAmB,GAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnE,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,OAAO;AACR,SAAA;;QAGD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/E,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;AAE3C,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,EAAE;AACpC,gBAAA,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC;gBAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,aAAA;AACD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;YACtF,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC7B,aAAA;YACD,OAAO;AACR,SAAA;;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7E,QAAA,IAAI,QAAQ,KAAR,IAAA,IAAA,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE;YACtB,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;AAE3C,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,EAAE;AACpC,gBAAA,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC;gBAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,aAAA;AACD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;YACtF,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC7B,aAAA;YACD,OAAO;AACR,SAAA;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,cAAc,CAAC,MAAK;;AAClB,YAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAC9D,YAAA,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,KAAK,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,eAAe,CAAC,cAAuB,EAAA;QAC7C,cAAc,CAAC,MAAK;;YAClB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACvD,YAAA,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,EAAE,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;gBACzB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,KAAK,GAAG,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAK,IAAI,CAAC,KAAK,CAAA,EAAA,CAAC,CAAC;AAC7G,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;gBACzB,OAAO;AACR,aAAA;YAED,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;gBACzB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;AACxD,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;AACpD,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AACvC,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AACrC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC;AACnC,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC;AAErC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAA,CAAC;YACnE,IAAI,CAAC,cAAc,GAAG;gBACpB,KAAK,EAAE,CAAG,EAAA,KAAK,CAAI,EAAA,CAAA;gBACnB,MAAM,EAAE,CAAG,EAAA,MAAM,CAAI,EAAA,CAAA;gBACrB,IAAI,EAAE,CAAG,EAAA,UAAU,CAAI,EAAA,CAAA;gBACvB,GAAG,EAAE,CAAG,EAAA,SAAS,CAAI,EAAA,CAAA;gBACrB,eAAe,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;aACpD,CAAC;AACF,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC/B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B;;oHApPU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,qbC7BpC,ioEAiCM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDJO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAGzB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,ioEAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBASG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEwB,cAAc,EAAA,CAAA;sBAA5C,YAAY;uBAAC,eAAe,CAAA;gBACE,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB,CAAA;;;MEzBlB,eAAe,CAAA;IAS1B,WAA6B,CAAA,gBAAkC,EAAmB,GAAsB,EAAA;AAA3E,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAAmB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAFxG,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;KAEoF;IAE5G,cAAc,CAAC,QAA8B,EAAE,OAAiC,EAAA;;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;AACR,SAAA;AAED,QAAA,MAAM,eAAe,GACnB,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAP,OAAO,GACP;AACE,YAAA,SAAS,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,IAAI;AAC5B,YAAA,IAAI,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,IAAI;SACxB,CAAC;AACJ,QAAA,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,eAAe,CAAC,SAAmC,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,OAAO,YAAY,CAAC;KACrB;AAEK,IAAA,aAAa,CAAC,MAAmC,EAAA;;;YACrD,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;YACjD,IAAI,aAAa,GAA6D,SAAS,CAAC;YAExF,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD,aAAA;AAED,YAAA,MAAM,QAAQ,GAAG,aAAa,YAAY,OAAO,GAAG,MAAM,aAAa,GAAG,aAAa,CAAC;AAExF,YAAA,IAAI,CAAC,YAAY,IAAI,QAAQ,KAAK,KAAK,EAAE;gBACvC,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAA+B,CAAC,CAAC;;AACvD,KAAA;AAED,IAAA,IAAI,oBAAoB,GAAA;;QACtB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;AAC1D,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;KAC5C;AAED,IAAA,IAAI,cAAc,GAAA;;AAChB,QAAA,MAAM,WAAW,GAAG;YAClB,cAAc;YACd,YAAY;YACZ,cAAc;YACd,iBAAiB;YACjB,eAAe;YACf,YAAY;YACZ,2BAA2B;YAC3B,SAAS;YACT,eAAe;SAChB,CAAC;QAEF,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU,CAAC;QAEvC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC;KACvF;AAED,IAAA,IAAI,WAAW,GAAA;;QACb,OAAO;AACL,YAAA,KAAK,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,KAAK;YACzB,QAAQ,EAAE,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO;SAC3C,CAAC;KACH;AAED,IAAA,aAAa,CAAC,MAAmC,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAE7C,QAAA,QAAQ,IAAI;AACV,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,UAAU,CAAC;AACpB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM,CAAC;AAChB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,OAAO,CAAC;AACjB,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,UAAU,CAAC;AACpB,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,MAAM,CAAC;AACZ,YAAA;AACE,gBAAA,OAAO,QAAQ,CAAC;AACnB,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,MAAmC,EAAA;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAChC,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;AAEO,IAAA,mBAAmB,CAAC,SAAgC,EAAA;AAC1D,QAAA,QAAQ,SAAS;AACf,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,mBAAmB,CAAC;AAC7B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,OAAO,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,iBAAiB,CAAC;AAC5B,SAAA;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAEO,IAAA,aAAa,CAAC,IAAwB,EAAA;QAC5C,OAAO,CAAC,IAAI,KAAJ,IAAA,IAAA,IAAI,cAAJ,IAAI,GAAI,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACrD;;4GAzIU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEf,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB5B,o4CAgCM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDXO,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACE,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,o4CAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;uIAIgB,YAAY,EAAA,CAAA;sBAAzD,SAAS;gBAAC,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MElBjC,4BAA4B,CAAA;AAEvC,IAAA,WAAA,CAAmB,QAA0B,EAAA;AAA1B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;KAAI;;yHAFtC,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;6GAA5B,4BAA4B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;iBACrC,CAAA;kGAEuB,IAAI,EAAA,CAAA;sBAAzB,KAAK;uBAAC,aAAa,CAAA;;MAOT,8BAA8B,CAAA;AAEzC,IAAA,WAAA,CAAmB,QAA0B,EAAA;AAA1B,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;KAAI;;2HAFtC,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;+GAA9B,8BAA8B,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,eAAA,EAAA,MAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;iBACvC,CAAA;kGAEyB,IAAI,EAAA,CAAA;sBAA3B,KAAK;uBAAC,eAAe,CAAA;;;MCNX,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAOW,QAAA,IAAK,CAAA,KAAA,GAAW,YAAY,CAAC;KACvC;;qHAFY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,wJCRrC,omCAmBA,EAAA,CAAA,CAAA;2FDXa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAG3B,IAAA,EAAA,EAAE,KAAK,EAAE,mCAAmC,EAAE,EAAA,QAAA,EAAA,omCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAG3C,KAAK,EAAA,CAAA;sBAAb,KAAK;;;MEDK,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAOW,QAAA,IAAK,CAAA,KAAA,GAAW,YAAY,CAAC;AAC7B,QAAA,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;KAC5B;;qHAHY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,sKCRrC,irBASA,EAAA,CAAA,CAAA;2FDDa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAG3B,IAAA,EAAA,EAAE,KAAK,EAAE,mCAAmC,EAAE,EAAA,QAAA,EAAA,irBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAG3C,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;MEHK,6BAA6B,CAAA;IAUxC,WACS,CAAA,gBAAkC,EACjC,GAAsB,EAAA;AADvB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AACjC,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAJxB,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAKxB;IAEJ,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;;YAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;;AACrC,gBAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,KAAI,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AACxE,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClE,iBAAA;AACH,aAAC,CAAC,CAAC;;AAEH,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;YAElF,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAC/B,SAAA;KACF;IAEO,eAAe,GAAA;;QACrB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAE5D,IAAI;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;AAG/D,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;;YAG9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;;;AAI1E,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACnD,aAAA;;YAGD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;;AACvC,gBAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,KAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;oBAC1E,MAAM,MAAM,GAAI,IAAI,CAAC,YAAY,CAAC,QAAgB,CAAC,SAAS,CAAC,CAAC;oBAC9D,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE;AACpD,wBAAA,MAAM,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AAC9B,4BAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACnC,4BAAA,IAAI,OAAO;gCAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,yBAAC,CAAC,CAAC;AACJ,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;AACjE,SAAA;KACF;AAEO,IAAA,iBAAiB,CAAC,KAAwC,EAAA;AAChE,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE;YAChD,OAAO,KAAK,CAAC,SAAS,CAAC;AACxB,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;AAEO,IAAA,kBAAkB,CAAC,KAAwC,EAAA;QACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;YAC7C,OAAO,KAAK,CAAC,MAAM,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAEO,IAAA,mBAAmB,CAAC,KAAwC,EAAA;QAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;YAC9C,OAAO,KAAK,CAAC,OAAO,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;0HA/GU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;8GAA7B,6BAA6B,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,kBAAkB;iBAC7B,CAAA;uIAEU,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;MCuBK,qBAAqB,CAAA;IA0ChC,WACU,CAAA,SAAuB,EACvB,GAAsB,EAAA;AADtB,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;AACvB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AA3CvB,QAAA,IAAI,CAAA,IAAA,GAAU,EAAE,CAAC;AACjB,QAAA,IAAO,CAAA,OAAA,GAAyB,EAAE,CAAC;;AAUnC,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;;AAEhC,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;;AAQ/B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA8E,CAAC;;AAS9G,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;;AAG7D,QAAA,IAAc,CAAA,cAAA,GAAyB,EAAE,CAAC;AAC1C,QAAA,IAAY,CAAA,YAAA,GAAU,EAAE,CAAC;AACzB,QAAA,IAAoB,CAAA,oBAAA,GAAW,EAAE,CAAC;AAClC,QAAA,IAAoB,CAAA,oBAAA,GAAa,EAAE,CAAC;;AAG5B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;AA0SxC,QAAA,IAAc,CAAA,cAAA,GAA0B,IAAI,CAAC;KArSjD;AAEJ,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;YAChD,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE;YACvE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3B,SAAA;KACF;IAED,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACxB;AAED,IAAA,IAAY,IAAI,GAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;QAChD,OAAO,CAAC,IAAI,GAAG,CAAC;KACjB;AACD,IAAA,IAAY,IAAI,GAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;QAChD,OAAO,CAAC,IAAI,GAAG,CAAC;KACjB;AACD,IAAA,IAAY,IAAI,GAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;QAChD,OAAO,CAAC,IAAI,GAAG,CAAC;KACjB;IAEO,oBAAoB,GAAA;AAC1B,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAqB,KAAI;AACjD,YAAA,MAAM,CAAC,GAAG,CAAA,CAAC,KAAD,IAAA,IAAA,CAAC,KAAD,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAC,CAAE,UAAU,KAAI,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;KACrG;AAED,IAAA,iBAAiB,CAAC,KAAa,EAAA;;AAC7B,QAAA,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAC9D,OAAO,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;KAClC;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;;AAC3B,QAAA,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAC5D,OAAO,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;KAClC;IAED,gBAAgB,CAAC,GAAQ,EAAE,MAA0B,EAAA;AACnD,QAAA,IAAI,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YACzD,IAAI;gBACF,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACnC,aAAA;AAAC,YAAA,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAC7F,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,UAAU,CAAC,CAAC;KACnD;AAED;;AAEG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC;;QAEzB,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;AAED,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE;AACzF,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAwC,EAAA;AACxD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE;YAChD,OAAO,KAAK,CAAC,SAAS,CAAC;AACxB,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;AAED;;AAEG;AACH,IAAA,kBAAkB,CAAC,KAAwC,EAAA;QACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;YAC7C,OAAO,KAAK,CAAC,MAAM,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED;;AAEG;AACH,IAAA,mBAAmB,CAAC,KAAwC,EAAA;QAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;YAC9C,OAAO,KAAK,CAAC,OAAO,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED;;AAEG;IACH,aAAa,CACX,GAAqB,EACrB,aAAgD,EAChD,GAAQ,EACR,MAA0B,EAC1B,QAAgB,EAChB,KAAa,EAAA;AAEb,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK,CAAC;AAEvB,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;;QAGnC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QAED,IAAI;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;;YAGxD,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;;YAGzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;gBACrC,IAAI,YAAY,CAAC,QAAQ,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,EAAE;oBAC7D,YAAY,CAAC,QAAgB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7D,iBAAA;AACH,aAAC,CAAC,CAAC;;YAGH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;gBACvC,IAAI,YAAY,CAAC,QAAQ,IAAI,SAAS,IAAI,YAAY,CAAC,QAAQ,EAAE;oBAC/D,MAAM,MAAM,GAAI,YAAY,CAAC,QAAgB,CAAC,SAAS,CAAC,CAAC;oBACzD,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE;AACpD,wBAAA,MAAM,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AAC9B,4BAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACnC,4BAAA,IAAI,OAAO;gCAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,yBAAC,CAAC,CAAC;AACJ,qBAAA;yBAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;;wBAEtD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,wBAAA,YAAY,CAAC,QAAgB,CAAC,SAAS,CAAC,GAAG;AAC1C,4BAAA,IAAI,EAAE,CAAC,KAAU,KAAI;gCACnB,YAAY,CAAC,KAAK,CAAC,CAAC;AACpB,gCAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACnC,gCAAA,IAAI,OAAO;oCAAE,OAAO,CAAC,KAAK,CAAC,CAAC;6BAC7B;4BACD,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;yBACzC,CAAC;AACH,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAC;;AAGH,YAAA,YAAY,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;;YAG9C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;AAChE,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;;;AAG5C,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5D;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;AAGlC,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,EAAE;AAC9B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBACpD,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAED,YAAY,CAAC,GAAQ,EAAE,IAAa,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;AAClB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,OAAO,IAAI,IAAI;AAAE,gBAAA,OAAO,EAAE,CAAC;AAC/B,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,OAAO,OAAO,KAAP,IAAA,IAAA,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;KACtB;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,KAAK,CAAC;KACd;;IAGO,kBAAkB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC,IAAI,EAAC,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,EAAE;AACjB,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAC/B,OAAO;AACR,SAAA;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAElF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;YACvC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE;AAC9B,gBAAA,OAAO,CAAG,EAAA,CAAC,CAAC,OAAO,IAAI,CAAC;AACzB,aAAA;YACD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,WAAW,CAAC;YAC5C,OAAO,CAAA,aAAA,EAAgB,OAAO,CAAA,MAAA,EAAS,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;AAC7D,SAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACtD,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjE,SAAA;KACF;;AAGD,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,KAAA,IAAA,IAAD,CAAC,KAAD,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAC,CAAE,UAAU,CAAA,CAAC,CAAC;KACzC;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,aAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAE,UAAU,CAAA,CAAC,CAAC;AACpD,QAAA,OAAO,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;KACzC;AAED,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B,CAAC;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACtC;IAED,iBAAiB,CAAC,KAAY,EAAE,GAAQ,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B,CAAC;AAChD,QAAA,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;KACjC;AAED,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC;AAC1B,aAAA;AACF,SAAA;KACF;IAMO,kBAAkB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtE,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC3B,OAAO;AACR,SAAA;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC3B,OAAO;AACR,SAAA;AACD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;AACjC,QAAA,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACxB,QAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/G,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;KACzB;;AAGD,IAAA,IAAI,gBAAgB,GAAA;;AAClB,QAAA,OAAO,MAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;KACrC;AAED,IAAA,IAAI,oBAAoB,GAAA;;AACtB,QAAA,OAAO,MAAA,IAAI,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;KACzC;;AAGD,IAAA,IAAI,OAAO,GAAA;QACT,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,CAAC;QACtE,OAAO,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;KACpF;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,OAAO,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC;KACpE;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,OAAO,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC;KACrE;AAED,IAAA,UAAU,CAAC,GAAuB,EAAA;QAChC,IAAI,EAAC,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,QAAQ,CAAA;YAAE,OAAO;AAC3B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;AAAE,gBAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC3D,iBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM;AAAE,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;AAC/D,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAClC,SAAA;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;KACjH;IAEO,aAAa,CAAC,CAAM,EAAE,CAAM,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;AAEzB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;AACrE,QAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QACrE,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,IAAI,IAAI,GAAG,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,GAAG,IAAI;AAAE,gBAAA,OAAO,CAAC,CAAC;AAC1B,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;;QAGD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC9B,IAAI,GAAG,GAAG,GAAG;oBAAE,OAAO,CAAC,CAAC,CAAC;gBACzB,IAAI,GAAG,GAAG,GAAG;AAAE,oBAAA,OAAO,CAAC,CAAC;AACxB,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;;AAED,YAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,SAAA;;AAGD,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;KAChF;;kHA7aU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ogBA4BO,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAJjC,4BAA4B,EAC5B,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,8BAA8B,kDC5DjD,wvNAuHM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDpFO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACE,mBAAmB,EAAA,IAAA,EAGvB,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,eAAA,EACb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wvNAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;qIAGtC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAIG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAIG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEwC,aAAa,EAAA,CAAA;sBAA3D,eAAe;uBAAC,4BAA4B,CAAA;gBACI,eAAe,EAAA,CAAA;sBAA/D,eAAe;uBAAC,8BAA8B,CAAA;gBAGO,aAAa,EAAA,CAAA;sBAAlE,YAAY;gBAAC,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;;;MElDzC,mBAAmB,CAAA;AANhC,IAAA,WAAA,GAAA;AAOW,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;AAE1B,QAAA,IAAA,CAAA,SAAS,GAAW,CAAC,CAAC;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;AACtB,QAAA,IAAA,CAAA,aAAa,GAAW,CAAC,CAAC;AAC1B,QAAA,IAAA,CAAA,eAAe,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEhD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;AAC7C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAoB,CAAC;;AAG1D,QAAA,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAErB,IAAA,CAAA,WAAW,GAAG;AACZ,YAAA,WAAW,EAAE,aAAa;AAC1B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;AACrB,gBAAA,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;AACrB,gBAAA,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;AACrB,gBAAA,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;AACtB,aAAA;SACF,CAAA;KAyDF;AAtDC,IAAA,IAAI,kBAAkB,GAAA;QACpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;YAClD,OAAO,IAAI,CAAC,UAAU,CAAC;AACxB,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;AAChD,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnE,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;QACD,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC3C;IAED,UAAU,GAAA;AACR,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACzD,IAAI,GAAG,GAAG,CAAC,EAAE;AACX,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;KAC1C;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;KACxC;AAED,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;KAC3B;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC5E;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE;YAC3B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC5E;;gHAlFU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,gYCbhC,wgHAqDM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDxCO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGpB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,wgHAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;MEOI,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;;AASW,QAAA,IAAO,CAAA,OAAA,GAAoB,EAAE,CAAC;AAE7B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAmB,CAAC;AAC3C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAiB,CAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAiB,CAAC;;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA2C,CAAC;KAqBrF;AAnBC,IAAA,kBAAkB,CAAC,EAAoB,EAAA;AACrC,QAAA,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACpB;AAED,IAAA,YAAY,CAAC,GAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrB;AAED,IAAA,cAAc,CAAC,GAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACvB;AAED,IAAA,cAAc,CAAC,MAAqB,EAAA;AAClC,QAAA,IAAI,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,QAAQ;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;KAC7D;;sHA7BU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0OC9BtC,k/CAuCM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDTO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAG5B,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,k/CAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEpBI,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;;AASW,QAAA,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;AAClB,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AACnB,QAAA,IAAO,CAAA,OAAA,GAAgD,EAAE,CAAC;AAC1D,QAAA,IAAU,CAAA,UAAA,GAAgD,EAAE,CAAC;AAC7D,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AACzB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAA,IAAA,GAAkC,QAAQ,CAAC;;AAG/C,QAAA,IAAO,CAAA,OAAA,GAA6B,IAAI,CAAC;;AAEzC,QAAA,IAAU,CAAA,UAAA,GAAgD,EAAE,CAAC;;AAE7D,QAAA,IAAQ,CAAA,QAAA,GAAW,WAAW,CAAC;;AAE/B,QAAA,IAAI,CAAA,IAAA,GAAY,IAAI,CAAC;AAEpB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAc,CAAC;;AAEzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAgD,CAAC;KAmB1F;AAjBC,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,WAAW,CAAC,KAAiB,EAAE,IAAqB,EAAA;AAClD,QAAA,IAAI,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,QAAQ,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,OAAO;AACR,SAAA;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KACxC;;iHAvCU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,wYCnBjC,68CAyBM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDNO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,68CAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEgBI,2BAA2B,CAAA;AALxC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAgB,CAAA,gBAAA,GAAW,gBAAgB,CAAC;AAG3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAuD,CAAC;AAC1F,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAEvC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAkC,CAAC;;AAElE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAkC,CAAC;;AAMxE,QAAA,IAAe,CAAA,eAAA,GAA2B,EAAE,CAAC;AAGrC,QAAA,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;AAC9B,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAEpB;;;AAGG;AACK,QAAA,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAa,CAAA,aAAA,GAAG,MAAK;;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAO;AACtD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;AAC9B,YAAA,IAAI,CAAC,EAAE;gBAAE,OAAO;AAChB,YAAA,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC;AAC1E,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,MAAM,GAAG,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,KAAI,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1C,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI;oBAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,CAAC,CAAC,CAAC;AAAE,iBAAA;AAAC,gBAAA,OAAA,EAAA,EAAM,GAAE;AAC9C,aAAA;AACH,SAAC,CAAC;KA2eH;IAzeC,QAAQ,GAAA;;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACxE,SAAA;QACD,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,KAAI,EAAE,EAAE,MAAM,CAAC;KAC9D;AAED,IAAA,IAAI,kBAAkB,GAAA;;QACpB,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,CAAC;AACxD,QAAA,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,CAAC;KACnF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAChC,IAAI,QAAQ,IAAI,OAAO,EAAE;;YAEvB,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACvC,IAAI,CAAC,0BAA0B,EAAE,CAAC;;;YAGlC,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,MAAK,SAAS,EAAE;gBACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC1C,aAAA;;AAED,YAAA,MAAM,GAAG,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,KAAI,EAAE,EAAE,MAAM,CAAC;AAChD,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE;;gBAEhC,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,MAAK,KAAK,EAAE;AACpC,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,iBAAA;qBAAM,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,MAAK,SAAS,EAAE;;AAE/C,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;;YAE7B,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAA,EAAE;;gBAEzB,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,MAAK,KAAK,EAAE;AACpC,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,iBAAA;qBAAM,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,MAAK,SAAS,EAAE;AAC/C,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,iBAAA;gBACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACzB,IAAI;AAAE,wBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAAE,qBAAA;AAAC,oBAAA,OAAA,EAAA,EAAM,GAAE;AACpD,oBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,iBAAA;AACF,aAAA;;AAED,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,MAAI,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,EAAE;gBACrD,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,aAAA;AACF,SAAA;QACD,IAAI,MAAM,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;YACrD,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACnC,SAAA;KACF;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,oBAAoB,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC;KACvE;AAED,IAAA,IAAI,UAAU,GAAA;;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,CAAC;KAC9C;AAED,IAAA,IAAI,UAAU,GAAA;;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,CAAC;KAC9C;AAED,IAAA,IAAI,gBAAgB,GAAA;;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,MAAK,UAAU,CAAC,CAAC;KACrE;AAED,IAAA,IAAI,WAAW,GAAA;;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;QACnC,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAc,CAAC;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK,CAAC;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG;AAAE,gBAAA,OAAO,IAAI,CAAC;YAC3C,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,KAAK,CAAC;YACzD,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,KAAK,CAAC,CAAC;AACpB,SAAA;QACD,OAAO,CAAC,CAAC,KAAK,CAAC;KAChB;IAEO,+BAA+B,GAAA;;QACrC,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,YAAY,IAAI,IAAI;gBAAE,OAAO;AACjC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gBAAE,OAAO;AACxC,YAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gBAAE,OAAO;YACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACtF,SAAA;KACF;IAEO,0BAA0B,GAAA;;QAChC,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YACvC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;YACzD,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,CACxF,CAAC,GAAG,KAAK,GAAG,KAAK,SAAS,CAC3B,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO;YAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;AAC7C,mBAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS;kBACpD,aAAa,CAAC;YAClB,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO;YACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,SAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,KAAU,EAAA;AACjC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;AAC7E,SAAA;AACD,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,gBAAgB,CAAC,GAAiB,EAAA;;QAChC,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;AAC3B,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACnC,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,EAAE,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,GAAG,CAAC,KAAK,CAAC;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;AAC/C,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;QACD,OAAO,YAAY,KAAK,QAAQ,CAAC;KAClC;IAEO,eAAe,GAAA;;QACrB,MAAM,OAAO,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,KAAI,EAAE,CAAC;AAC3C,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,QAAC,CAAA,EAAA,GAAA,CAAC,CAAC,EAAE,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,KAAK,EAAC,EAAA,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;KACzE;AAED,IAAA,iBAAiB,CAAC,MAAiB,EAAA;;QACjC,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,SAAA;AAAM,aAAA;YACL,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,SAAA;;QAED,IAAI;YAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAAE,SAAA;AAAC,QAAA,OAAA,EAAA,EAAM,GAAE;KAChC;IAED,oBAAoB,CAAC,MAAe,EAAE,OAAkB,EAAA;;AACtD,QAAA,IAAI,MAAM,EAAE;;AAEV,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;;AAExB,YAAA,IAAI,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,KAAI,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,aAAA;;AAED,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACnC,SAAA;QAED,IAAI,CAAC,MAAM,EAAE;;AAEX,YAAA,IAAI,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC5C,aAAA;;YAED,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AACjC,aAAA;;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI;AAAE,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAAE,iBAAA;AAAC,gBAAA,OAAA,EAAA,EAAM,GAAE;AACpD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,aAAA;;YAED,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI;oBAAE,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAAE,iBAAA;AAAC,gBAAA,OAAA,EAAA,EAAM,GAAE;AACtF,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAChC,aAAA;;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO;AACR,SAAA;;AAGD,QAAA,IAAI,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU,EAAE;YAC3B,UAAU,CAAC,MAAK;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAmB,yBAAyB,CAAC,CAAC;AAClF,gBAAA,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,KAAK,EAAE,CAAC;aAChB,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;;AAGD,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,KAAI,IAAI,CAAC,SAAS,CAAC,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAkB,CAAC,EAAE;AAChF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI;gBAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,CAAC,CAAC,CAAC;AAAE,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C,SAAA;;QAGD,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC;;QAElD,UAAU,CAAC,MAAK;YACd,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAkB,CAAC;gBAC3F,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;gBAC3E,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtF,iBAAA;AACF,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;SACX,EAAE,CAAC,CAAC,CAAC;KACP;IAED,QAAQ,CAAC,GAAW,EAAE,KAAa,EAAA;;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAL,KAAK,GAAI,EAAE,CAAC;AACxC,QAAA,IAAI,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,EAAE;;YAE7B,IAAI;AAAE,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,CAAC,CAAC;AAAE,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,EAAE,CAAC,CAAC;;AAEpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,KAAI,EAAE,EAAE,MAAM,CAAC;AAC9D,SAAA;KACF;AAED;;AAEG;AACK,IAAA,oBAAoB,CAAC,GAAW,EAAA;AACtC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AAC1C,SAAA;AACD,QAAA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;KAC7D;;IAGM,UAAU,GAAA;;QACf,IAAI;AACF,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAC;AACzB,SAAA;AAAC,QAAA,OAAA,EAAA,EAAM,GAAE;KACX;AAED,IAAA,eAAe,CAAC,CAA2B,EAAA;QACzC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;;QAEnE,IAAI,CAAC,CAAC,YAAY;AAAE,YAAA,OAAO,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;;AAE3C,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;AAE/B,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA,EAAA,GAAA,MAAA,CAAA,EAAA,GAAA,GAAG,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,GAAG,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,GAAG,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5E,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;;QAGH,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,YAAY,CAAC;AACrB,SAAA;QAED,MAAM,IAAI,GAAG,CAAC,CAAe,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,QAAC,CAAA,EAAA,GAAA,CAAC,CAAC,EAAE,mCAAI,CAAC,CAAC,KAAK,EAAC,EAAA,CAAC;QACpD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG9E,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAO,CAAC;QAC5B,MAAM,MAAM,GAAmB,EAAE,CAAC;AAClC,QAAA,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;AAC/B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,EAAE,KAAK,SAAS;gBAAE,SAAS;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACb,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,aAAA;AACF,SAAA;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;AAC5B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,EAAE,KAAK,SAAS;gBAAE,SAAS;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACb,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;;IAGD,iBAAiB,CAAC,KAAsB,EAAE,MAAiB,EAAA;;;QAEzD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;;YAEhG,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;AAC7B,YAAA,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAEnC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;;AAE/B,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,QAAQ,GAAI,OAAO,CAAC,KAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACnF,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,iBAAA;AACF,aAAA;;YAED,OAAO;AACR,SAAA;;;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAC,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA,GAAG,KAAK,CAAC;AAC3E,QAAA,IAAI,WAAW,EAAE;YACf,IAAI;gBACF,MAAM,CAAC,KAAK,EAAE,CAAC;AAChB,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AACX,SAAA;;AAED,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,MAAI,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAA,EAAE;YAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC5C,SAAA;QAED,IAAI,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAA,KAAK,UAAU,EAAE;YAC/C,IAAI;gBACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1C,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;AACpE,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,GAAG,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,GAAG;YACrB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK;AACN,SAAA,CAAC,CAAC;KACJ;AAGD,IAAA,mBAAmB,CAAC,KAAiB,EAAA;;;QAEnC,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,CAAA,EAAE;YAC9B,OAAO;AACR,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B,CAAC;AAClD,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;;AAEpB,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,KAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5E,OAAO;AACR,SAAA;;AAED,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAkB,CAAC;AAC7F,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,gBAAgB,EAAE;YACpB,OAAO;AACR,SAAA;QACD,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;AAAC,QAAA,OAAA,EAAA,EAAM,GAAE;KACX;AAED;;;AAGG;AACH,IAAA,aAAa,CAAC,IAAY,EAAA;;AACxB,QAAA,IAAI,CAAC,IAAI,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,gBAAgB,CAAA,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;;AAG7C,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACtB,SAAA;;AAGD,QAAA,IAAI,KAAa,CAAC;AAClB,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,IAAI;gBACF,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnC,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;AACpD,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,aAAA;AACF,SAAA;AAAM,aAAA;YACL,KAAK,GAAG,OAAO,CAAC;AACjB,SAAA;;QAGD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAA,+BAAA,EAAkC,KAAK,CAAA,OAAA,CAAS,CAAC,CAAC;KAC5F;AAED;;AAEG;AACK,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,CAAC,SAAS,CAAC;KACtB;AAED;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;;QACjB,OAAO,CAAC,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,gBAAgB,CAAA,CAAC;KACxC;IAEO,qBAAqB,GAAA;;;QAE3B,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAA;YAAE,OAAO;;QAElC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,kDAAkD,CAAuB,CAAC;AAClH,QAAA,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI;AAAE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAAE,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AACpD,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAmB,CAAC;QAC1E,IAAI,CAAC,gBAAgB,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,KAAI;;AAC3D,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC3B,IAAI,KAAK,CAAC,cAAc,EAAE;;AAExB,oBAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,WAAW,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,EAAE;AAC1E,wBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,MAAM,GAAG,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,KAAI,EAAE,CAAC;wBACnC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;AAE1C,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;wBACtC,IAAI;4BAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,CAAC,CAAC,CAAC;AAAE,yBAAA;AAAC,wBAAA,OAAA,EAAA,EAAM,GAAE;AAC9C,qBAAA;AACF,iBAAA;AACF,aAAA;SACF,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACxC,IAAI;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAAE,SAAA;AAAC,QAAA,OAAA,EAAA,EAAM,GAAE;KAC1D;;wHAjhBU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4GAA3B,2BAA2B,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAYI,UAAU,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpEtD,uuLAgFM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDxBO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,oBAAoB,EAAA,eAAA,EAEb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uuLAAA,EAAA,CAAA;8BAItC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEoC,SAAS,EAAA,CAAA;sBAAnD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBACe,MAAM,EAAA,CAAA;sBAA7D,SAAS;uBAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAgatD,mBAAmB,EAAA,CAAA;sBADlB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AE7d5C;AACA,MAAM,CAAC,GAAS,MAAc,CAAC,OAAO,IAAK,MAAc,CAAC;AAC1D,MAAM,MAAM,GAAS,YAAoB,CAAC,OAAO,IAAK,YAAoB,CAAC;AAE3E;AACA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAChC,MAAc,CAAC,MAAM,GAAI,MAAc,CAAC,MAAM,IAAI,CAAC,CAAC;IACpD,MAAc,CAAC,CAAC,GAAI,MAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAc,CAAC,MAAM,GAAI,MAAc,CAAC,MAAM,IAAI,MAAM,CAAC;AAC3D,CAAA;MAyCY,wBAAwB,CAAA;AAuCnC,IAAA,WAAA,CAAoB,EAAc,EAAA;AAAd,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;AAtCzB,QAAA,IAAO,CAAA,OAAA,GAA2B,EAAE,CAAC;AAMpC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAoD,CAAC;AACpF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAoD,CAAC;QAGtF,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAU,KAAM,GAAC,CAAC;AAC9B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG,CAAC;KA0BS;AAxBtC;;AAEG;IACK,gBAAgB,CAAC,KAAU,EAAE,GAAQ,EAAA;;AAC3C,QAAA,IAAI,OAAQ,MAAc,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO;AAC1D,QAAA,MAAM,CAAC,GAAI,MAAc,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC;QACpF,MAAM,SAAS,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC;QAEnF,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,QAAQ,IAAI,MAAM,EAAE;YACtB,IAAI;AACF,gBAAA,MAAM,IAAI,GAAG,CAAA,EAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA,EAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACxE,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AACX,SAAA;AAAM,aAAA;YACL,IAAI;AACF,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClC,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AACX,SAAA;KACF;IAID,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,aAAA;YACD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,aAAA;AACF,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,mBAAmB,GAAA;;AACzB,QAAA,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,OAAQ,CAAC,CAAC,EAAU,CAAC,eAAe,KAAK,WAAW,EAAE;AACpF,YAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO;AACR,SAAA;;AAGD,QAAA,IAAI,OAAQ,MAAc,CAAC,MAAM,KAAK,WAAW,EAAE;AACjD,YAAA,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO;AACR,SAAA;;AAGD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAA,IAAI,MAAM,CAAC;AAE3E,QAAA,MAAM,WAAW,GAA2B;AAC1C,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,gBAAgB,EAAE,QAAQ;AAC1B,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACtD,UAAU,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACtI,gBAAA,QAAQ,EAAE,CAAC;AACZ,aAAA;AACD,YAAA,QAAQ,EAAE,gBAAuB;SAClC,CAAC;;AAGF,QAAA,MAAM,cAAc,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACf,WAAW,CAAA,EACX,IAAI,CAAC,OAAO,CAAA,EAAA,EACf,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACD,WAAW,CAAC,MAAM,CAClB,GAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,KAAI,EAAE,EAEhC,EAAA,eAAe,EAAE,KAAK,GACvB,CAAC;;AAGF,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAmC,KAAS;AAC5D,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AACpB,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACzB,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE;AAAE,oBAAA,OAAO,IAAI,CAAC;AAC5E,aAAA;YACD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;AACpD,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,YAAA,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAClD,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACrB,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;QAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEzC,QAAA,IAAI,WAAW;AAAE,YAAA,cAAc,CAAC,SAAS,GAAG,WAAW,CAAC;AACxD,QAAA,IAAI,SAAS;AAAE,YAAA,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC;AAClD,QAAA,IAAI,SAAS;AAAE,YAAA,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC;AAClD,QAAA,IAAI,SAAS;AAAE,YAAA,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC;;AAGlD,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;YAC9B,IAAI;AAAE,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAAE,aAAA;AAAC,YAAA,OAAA,EAAA,EAAM,GAAE;AACnD,SAAA;;AAGD,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,KAAU,EAAE,GAAQ,EAAE,KAAa,KAAI;AAC/F,YAAA,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAChD,YAAA,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAE1C,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;;AAGvE,QAAA,IAAI,MAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,EAAE;AAClC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AACxC,YAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;AAC1C,gBAAA,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACvC,aAAA;AACF,SAAA;;AAGD,QAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,MAAK;AACzD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;;QAGH,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;AACjC,QAAA,IAAI,OAAQ,MAAc,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO;AAE1D,QAAA,MAAM,MAAM,GAAI,MAAc,CAAC,MAAM,CAAC;;AAGtC,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAmC,KAAS;AAC5D,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AACpB,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACzB,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE;AAAE,oBAAA,OAAO,IAAI,CAAC;AAC5E,aAAA;YACD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;AACpD,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,YAAA,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAClD,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACrB,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;QAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEzC,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3C,SAAA;;AAGD,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;KAC/C;IAEO,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;AACjC,QAAA,IAAI,OAAQ,MAAc,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO;AAE1D,QAAA,MAAM,MAAM,GAAI,MAAc,CAAC,MAAM,CAAC;;AAGtC,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAmC,KAAS;AAC5D,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;YACpB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;AACpD,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,YAAA,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAClD,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACrB,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEzC,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3C,SAAA;KACF;IAEO,aAAa,GAAA;;QACnB,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,KAAK,WAAW,EAAE;AACnD,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACvD,YAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;KACF;;AAGD,IAAA,UAAU,CAAC,KAAsD,EAAA;QAC/D,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;;AAEvC,YAAA,MAAM,WAAW,GAAG,CAAC,CAAc,KAAa;AAC9C,gBAAA,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAChE,aAAC,CAAC;YAEF,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YACrF,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC;YAC7E,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;AAAM,aAAA,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAClE,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI;AACF,oBAAA,MAAM,CAAC,GAAI,MAAc,CAAC,MAAM,CAAC;AACjC,oBAAA,IAAI,CAAC,EAAE;;wBAEL,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;wBACtC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AACrC,qBAAA;AACD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,iBAAA;AAAC,gBAAA,OAAA,EAAA,EAAM,GAAE;AACX,aAAA;AACF,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC7C,SAAA;KACF;;qHA5RU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EARxB,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;KACF,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAEU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;iBACF,CAAA;iGAEU,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MCNI,wBAAwB,CAAA;AAvDrC,IAAA,WAAA,GAAA;AA0DW,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAMjB,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAClB,QAAA,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAK,CAAA,KAAA,GAAgC,QAAQ,CAAC;AAC9C,QAAA,IAAK,CAAA,KAAA,GAA2B,MAAM,CAAC;AAItC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAoD,CAAC;AACpF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAoD,CAAC;AAI9F,QAAA,IAAa,CAAA,aAAA,GAA2B,EAAE,CAAC;QAEnC,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAsD,KAAM,GAAC,CAAC;AAC1E,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG,CAAC;KA8E9B;IA5EC,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,SAAS;AAChE,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS;AAC1D,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS;AAC1D,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS;YAC1D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,gBAAgB,EAAE,QAAQ;AAC1B,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACtD,UAAU,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACtI,gBAAA,QAAQ,EAAE,CAAC;AACZ,aAAA;SACF,CAAC;KACH;IAED,WAAW,GAAA;;KAEV;AAED,IAAA,cAAc,CAAC,KAAuD,EAAA;QACpE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;AAED,IAAA,OAAO,CAAC,KAAuD,EAAA;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;;AAGD,IAAA,UAAU,CAAC,KAAsD,EAAA;AAC/D,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC;AACvC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,EAAoE,EAAA;AACnF,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAED,UAAU,GAAA;;AACR,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA;YAAE,OAAO;AAC3D,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACrC;;qHAtGU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EARxB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EAnDS,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAM,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FASU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvDpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;iBACF,CAAA;8BAEU,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEkC,QAAQ,EAAA,CAAA;sBAAhD,SAAS;gBAAC,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MCrB5B,sBAAsB,CAAA;AAkBjC,IAAA,WAAA,CAA6B,EAAe,EAAA;AAAf,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;AAjBnC,QAAA,IAAM,CAAA,MAAA,GAAwB,EAAE,CAAC;AACjC,QAAA,IAAK,CAAA,KAAA,GAAwB,EAAE,CAAC;AAChC,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;AAChC,QAAA,IAAY,CAAA,YAAA,GAAgC,QAAQ,CAAC;AACpD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAuB,CAAC;AACzD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAuB,CAAC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;AACvC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAuB,CAAC;AAC7D,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAQ,CAAC;QAExD,IAAI,CAAA,IAAA,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;AACrB,QAAA,IAAe,CAAA,eAAA,GAA2B,EAAE,CAAC;AACrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC1D,QAAA,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;;AAmB3B,QAAA,IAAiB,CAAA,iBAAA,GAAwB,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAQ,EAAE,CAAC;QACpB,IAAA,CAAA,SAAS,GAAG,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;;AAEjD,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAM,KAAa;YACvC,IAAI;gBACF,MAAM,CAAC,GAAS,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/E,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7C,aAAA;YAAC,OAAM,EAAA,EAAA;AACN,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACH,SAAC,CAAC;;QAzBA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KAC1C;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACzC,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;IAED,YAAY,CAAC,KAA4C,EAAE,GAAW,EAAA;AACpE,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KACxC;IAeD,iBAAiB,CAAC,CAAM,EAAE,GAAW,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO;AACnB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAc,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,CAAA,CAAC,aAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAE,SAAS,KAAI,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QACjI,MAAM,MAAM,GAAG,CAAA,CAAC,aAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAE,OAAO,KAAI,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACvH,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,SAAA;KACF;IAEO,SAAS,GAAA;QACf,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAG;YAC9B,IAAI,CAAC,CAAC,MAAM;gBAAE,OAAO;AACrB,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;gBAClC,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBACtD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC3B,oBAAA,KAAK,EAAE,IAAI,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1C,oBAAA,GAAG,EAAE,IAAI,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC;AACvC,iBAAA,CAAC,CAAC;;AAEH,gBAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AAC9B,oBAAA,SAAS,EAAE,YAAY,CAAC,KAAK,IAAI,IAAI;AACrC,oBAAA,OAAO,EAAE,YAAY,CAAC,GAAG,IAAI,IAAI;iBAClC,CAAC;AACH,aAAA;AAAM,iBAAA;gBACL,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,OAAO,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACpF,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AACvC,iBAAA;AAAM,qBAAA;AACL,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAEjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;;AAEnE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AACpC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IAED,oBAAoB,CAAC,MAAe,EAAE,MAAW,EAAA;AAC/C,QAAA,IAAI,MAAM,EAAE;YACV,UAAU,CAAC,MAAK;AACd,gBAAA,MAAM,SAAS,GAAG,CAAC,CAAa,KAAI;;oBAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,qCAAqC,CAAuB,CAAC;AAClG,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;AACvC,oBAAA,MAAM,QAAQ,GAAI,CAAA,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAA6B,KAAI,IAAI,CAAC;AAC7E,oBAAA,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,oBAAA,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzE,oBAAA,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE;wBACjC,MAAM,CAAC,KAAK,EAAE,CAAC;AAChB,qBAAA;AACH,iBAAC,CAAC;gBACF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;aACzG,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA;YACL,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtD,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,SAAA;KACF;IAED,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;KACxD;AAED,IAAA,eAAe,CAAC,IAAuB,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,OAAO,KAAI,EAAE,CAAC;AACpC,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC;AACvB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAG;;YAC1B,MAAM,IAAI,GAAG,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAG,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,GAAG,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,CAAA,EAAA,GAAA,GAAG,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9E,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,YAAY,CAAC,GAAW,EAAA;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAc,CAAC;KACxC;AAED,IAAA,eAAe,CAAC,IAAuB,EAAA;QACrC,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;SAC5B,CAAC;KACH;IAED,KAAK,GAAA;QACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC5C;IAED,KAAK,GAAA;QACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,IAAI,YAAY,SAAS,EAAE;gBAC7B,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACvC,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;gBACL,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3B,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACtC;;IAGD,oBAAoB,GAAA;QAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAEO,mBAAmB,GAAA;;QACzB,IAAI;AACF,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AACrD,SAAA;AAAC,QAAA,OAAA,EAAA,EAAM,GAAE;KACX;IAEO,SAAS,GAAA;QACf,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAG;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO;AAClB,YAAA,IAAI,GAAG,GAAQ,IAAI,YAAY,SAAS,GAAI,IAAkB,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1F,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;gBAClC,MAAM,KAAK,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,KAAK,CAAC;gBAAC,MAAM,GAAG,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,GAAG,CAAC;gBAC/C,IAAI,KAAK,IAAI,GAAG;oBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAClD,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,EAAE;AAC3F,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACrB,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,yBAAyB,CAAC,IAAuB,EAAA;QACvD,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;YAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YACpC,OAAO,IAAI,CAAC,aAAa,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAEO,IAAA,mBAAmB,CAAC,KAAU,EAAA;AACpC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS,CAAC;AAC5D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAC5C,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,wBAAwB,CAAC,IAAuB,EAAA;;QACtD,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;AACxE,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,GAAG,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC/C,QAAA,MAAM,KAAK,GAAG,CAAC,CAAc,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AACjG,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;KACjD;AAEO,IAAA,kBAAkB,CAAC,KAAU,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;AACxB,QAAA,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AACpD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;KAChD;IAEO,qBAAqB,CAAC,GAAW,EAAE,KAA6C,EAAA;QACtF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC9D,IAAI,EAAC,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,YAAY,CAAA;YAAE,OAAO;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO;AACvB,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,YAAY,CACf;AACE,YAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACrC,YAAA,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;SAClC,EACD,KAAK,CACN,CAAC;KACH;;IAGD,kBAAkB,CAAC,GAAW,EAAE,SAA0F,EAAA;QACxH,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO;AACvB,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtD,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;KACjC;AAEO,IAAA,cAAc,CAAC,SAA0F,EAAA;AAC/G,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACzB,QAAA,MAAM,iBAAiB,GAAG,CAAC,CAAO,KAAO,EAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AACzG,QAAA,QAAQ,SAAS;AACf,YAAA,KAAK,OAAO;gBACV,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YACtC,KAAK,WAAW,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D,gBAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC9B,aAAA;YACD,KAAK,YAAY,EAAE;AACjB,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9D,gBAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC9B,aAAA;YACD,KAAK,YAAY,EAAE;AACjB,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9D,gBAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC9B,aAAA;YACD,KAAK,WAAW,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACjE,gBAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC9B,aAAA;YACD,KAAK,WAAW,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/C,aAAA;AACF,SAAA;KACF;AACO,IAAA,UAAU,CAAC,CAAO,EAAU,EAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE;AACtF,IAAA,QAAQ,CAAC,CAAO,EAAU,EAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE;IACzF,YAAY,CAAC,IAAY,EAAE,KAAa,EAAA,EAAU,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE;IAC7F,UAAU,CAAC,IAAY,EAAE,KAAa,EAAA,EAAU,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC,CAAC,EAAE;IACpG,cAAc,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACzB,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5E,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAChF,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAChF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AACpF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAChF,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,YAAA,aAAa,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,YAAA,cAAc,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,YAAA,cAAc,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrE,YAAA,YAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC7E,CAAC;KACH;IACD,uBAAuB,CAAC,KAAuD,EAAE,GAAW,EAAA;QAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,KAAK,CAAC,UAAU,CAAC;YACf,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,GAAG,EAAE,KAAK,CAAC,OAAO;AACnB,SAAA,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAExB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;KACjC;IAED,sBAAsB,CAAC,KAAuD,EAAE,GAAW,EAAA;AACzF,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;;AAEzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE;;AAErC,SAAA;KACF;IAED,wBAAwB,GAAA;;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEzD,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC5D,YAAA,aAAa,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAClE,YAAA,cAAc,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACrE,YAAA,cAAc,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACrE,YAAA,YAAY,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACzE,YAAA,YAAY,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;SAC1E,CAAC;KACH;AAED,IAAA,sBAAsB,CAAC,GAAW,EAAA;;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC;QAE5B,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,SAAS,KAAA,IAAA,IAAT,SAAS,KAAT,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAS,CAAE,KAAK,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,KAAK,CAAC;AAE9B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;QAEtC,IAAI,QAAQ,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,2BAA2B,CAAC;QAC5D,IAAI,CAAC,QAAQ,IAAI,MAAM;AAAE,YAAA,OAAO,4BAA4B,CAAC;QAE7D,IAAI,SAAS,CAAC,OAAO,EAAE;AACrB,YAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AACrD,YAAA,OAAO,MAAM,GAAG,CAAG,EAAA,MAAM,CAAC,KAAK,CAAa,WAAA,CAAA,GAAG,uBAAuB,CAAC;AACxE,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;mHAzYU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAgBnB,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1E3C,i8PA8IM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAO,2BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDpFO,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;+BACE,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,i8PAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;oGAGrB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBAOoC,gBAAgB,EAAA,CAAA;sBAA1D,YAAY;uBAAC,2BAA2B,CAAA;;;MEnD9B,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAE7B,QAAA,IAAO,CAAA,OAAA,GAAyC,EAAE,CAAC;;AAEnD,QAAA,IAAgB,CAAA,gBAAA,GAA2B,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,2BAA2B,GAAW,CAAC,CAAC;AAEvC,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAA0B,CAAC;AACpE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;KAqC1D;AAnCC,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC5E,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC9B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;oBAC/C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACtC,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;KACpD;AAED,IAAA,gBAAgB,CAAC,OAAgB,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;AACpC,SAAA;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,qBAAqB,GAAA;QACnB,IAAI,CAAC,sBAAsB,CAAC,IAAI,mBAAM,IAAI,CAAC,gBAAgB,CAAA,CAAG,CAAC;KAChE;IAED,mBAAmB,GAAA;QACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;KAC/D;IAEO,gBAAgB,GAAA;AACtB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;KACvE;;sHA7CU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gYCvBtC,6mEA0Ca,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAX,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDnBA,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,6mEAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,2BAA2B,EAAA,CAAA;sBAAnC,KAAK;gBAEI,sBAAsB,EAAA,CAAA;sBAA/B,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;;;MEbI,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAa,CAAA,aAAA,GAAU,EAAE,CAAC;AAC1B,QAAA,IAAO,CAAA,OAAA,GAAkB,EAAE,CAAC;AAE3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAmC,CAAC;KAmC7E;AAjCC,IAAA,IAAI,YAAY,GAAA;;AACd,QAAA,OAAO,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,IAAI,CAAC,CAAC;KAC9C;AAED,IAAA,IAAI,iBAAiB,GAAA;;QACnB,OAAO,CAAA,MAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAK,CAAC,CAAC;KACzC;AAED,IAAA,IAAI,cAAc,GAAA;;QAChB,MAAM,CAAC,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;AAC1C,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,CAAG,EAAA,CAAC,WAAW,CAAC;KACjD;IAED,cAAc,GAAA;QACZ,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;AACnD,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KACxE;AAED,IAAA,UAAU,CAAC,MAAmB,EAAA;QAC5B,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;AACnD,QAAA,OAAO,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACzD;AAED,IAAA,QAAQ,CAAC,MAAmB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC3B,OAAO;AACR,SAAA;AACD,QAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QACtE,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChC;;wHAtCU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,kNCnBxC,+tCAkBM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAZ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDCO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACE,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,+tCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;METI,qBAAqB,CAAA;AAXlC,IAAA,WAAA,GAAA;AAaW,QAAA,IAAQ,CAAA,QAAA,GAAW,IAAI,CAAC;AACxB,QAAA,IAAM,CAAA,MAAA,GAAW,GAAG,CAAC;AACrB,QAAA,IAAW,CAAA,WAAA,GAAW,GAAG,CAAC;KAoBpC;AAlBC,IAAA,aAAa,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACnD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAG,EAAA,KAAK,GAAG,CAAC;KAC3B;AAED,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,oBAAoB,CAAC;QAC9F,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,oBAAoB,CAAC;QAC3C,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,oBAAoB,CAAC;AAC3C,QAAA,OAAO,oBAAoB,CAAC;KAC7B;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,SAAA;KACF;;kHAvBU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,yQCdlC,m9GA8CM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDhCO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAGZ,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,oBAAoB,EAAE,MAAM;AAC5B,wBAAA,qBAAqB,EAAE,MAAM;qBAC9B,EAAA,QAAA,EAAA,m9GAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;MERK,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAI,CAAA,IAAA,GAAW,cAAc,CAAC;AAC9B,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AACnB,QAAA,IAAK,CAAA,KAAA,GAAoB,CAAC,CAAC;AAC3B,QAAA,IAAK,CAAA,KAAA,GAAsB,EAAE,CAAC;AAC9B,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AACvB,QAAA,IAAM,CAAA,MAAA,GAAW,GAAG,CAAC;QAGpB,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAS,CAAC;KA4ClD;AA1CC,IAAA,IAAI,gBAAgB,GAAA;;;QAElB,IAAI;AACF,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,IAAK,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAkB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,0CAAE,MAAM,IAAG,CAAC,CAAC;AAC/E,SAAA;QAAC,OAAM,EAAA,EAAA;AACN,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5B,SAAA;KACF;AAED,IAAA,aAAa,CAAC,IAAqB,EAAA;;QACjC,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;KAC7B;IAEO,QAAQ,GAAA;AACd,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,YAAY,IAAI,CAAC,CAAC;KAC1B;AAED,IAAA,aAAa,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACnD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAG,EAAA,KAAK,GAAG,CAAC;KAC3B;AAED,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,oBAAoB,CAAC;QAC9F,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,oBAAoB,CAAC;QAC3C,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,oBAAoB,CAAC;QAC3C,OAAO,oBAAoB,CAAC;KAC7B;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAA;;AAE3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;QAE5B,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;KACF;;iHApDU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,wTCVjC,ipJA6DM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAa,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDnDO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,ipJAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;AEnBT;;;;;;;;AAQG;AAEU,MAAA,kBAAkB,GAAG;;AAEhC,IAAA,SAAS,EAAE,gCAAgC;;AAG3C,IAAA,YAAY,EAAE,8BAA8B;;AAG5C,IAAA,aAAa,EAAE,6BAA6B;;AAG5C,IAAA,SAAS,EAAE,iCAAiC;;AAG5C,IAAA,aAAa,EAAE,6BAA6B;;AAG5C,IAAA,aAAa,EAAE,sCAAsC;;AAGrD,IAAA,eAAe,EAAE,+BAA+B;;AAGhD,IAAA,OAAO,EAAE,8BAA8B;;AAGvC,IAAA,YAAY,EAAE,mCAAmC;;;AClBtC,MAAA,mBAAmB,GAAkD;AAChF,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,sBAAsB;AAC7B,QAAA,WAAW,EACT,uIAAuI;QACzI,QAAQ,EAAE,kBAAkB,CAAC,eAAe;AAC5C,QAAA,OAAO,EAAE;AACP,YAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;AAChD,YAAA,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE;AACjD,SAAA;AACF,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,KAAK,EAAE,oBAAoB;AAC3B,QAAA,WAAW,EACT,sHAAsH;QACxH,QAAQ,EAAE,kBAAkB,CAAC,YAAY;QACzC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACnD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,uBAAuB;AAC9B,QAAA,WAAW,EACT,uIAAuI;QACzI,QAAQ,EAAE,kBAAkB,CAAC,SAAS;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC1D,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,oBAAoB;AAC3B,QAAA,WAAW,EACT,wIAAwI;QAC1I,QAAQ,EAAE,kBAAkB,CAAC,aAAa;QAC1C,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,2BAA2B;AAClC,QAAA,WAAW,EACT,qIAAqI;QACvI,QAAQ,EAAE,kBAAkB,CAAC,SAAS;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC5D,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,mBAAmB;AAC1B,QAAA,WAAW,EACT,2IAA2I;QAC7I,QAAQ,EAAE,kBAAkB,CAAC,aAAa;AAC1C,QAAA,OAAO,EAAE;AACP,YAAA,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC3C,YAAA,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE;AAChD,SAAA;AACF,KAAA;EACD;AAEF;;;;AAIG;AACG,SAAU,mBAAmB,CAAC,GAAwB,EAAA;AAC1D,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC;;MC1Da,mBAAmB,CAAA;AANhC,IAAA,WAAA,GAAA;AASW,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AACnB,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AACzB,QAAA,IAAO,CAAA,OAAA,GAAuB,EAAE,CAAC;AAEhC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB,CAAC;AAGrD,QAAA,IAAM,CAAA,MAAA,GAAW,EAAE,CAAC;AACpB,QAAA,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAC1B,QAAA,IAAQ,CAAA,QAAA,GAAuB,EAAE,CAAC;KAiE3C;AA/DC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE;;YAEf,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC3C,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;AAClF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9B,SAAA;KACF;AAED;;;AAGG;AACK,IAAA,gBAAgB,CAAC,SAAiB,EAAA;;QAExC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACpG,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;;AAGD,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AACtC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;;;;;AAMD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;KAC/C;AAED,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;KAC3D;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;KACrD;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;KACnD;IAED,aAAa,CAAC,MAAwB,EAAE,KAAiB,EAAA;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,MAAM,CAAC,OAAO,EAAE,CAAC;AAClB,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAA;KACF;;gHA5EU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,kRClBhC,o1GA2DA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDzCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAGrB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,o1GAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEdI,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;AAQW,QAAA,IAAK,CAAA,KAAA,GAAW,OAAO,CAAC;AAExB,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;;AAKvB,QAAA,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;;QAEzB,IAAA,CAAA,gBAAgB,GAAqB;AAC5C,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,kBAAkB,CAAC,eAAe;AAC5C,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;KACH;;+GAhBY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,mQCX/B,i4DA+CM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAc,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAf,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDpCO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,i4DAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;;;MEZK,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAA,CAAA,KAAK,GAAW,CAAC,CAAC;AAClB,QAAA,IAAK,CAAA,KAAA,GAAW,mBAAmB,CAAC;AAEpC,QAAA,IAAW,CAAA,WAAA,GAAW,gBAAgB,CAAC;AACvC,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;;AAEtB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;KAwBhD;AAtBC,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,CAAG,CAAC;KAChB;AAED,IAAA,IAAI,SAAS,GAAA;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,GAAG,CAAC;KAChB;IAED,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AACpG,YAAA,OAAO,oBAAoB,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC;AAAE,YAAA,OAAO,oBAAoB,CAAC;AACvD,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC;AAAE,YAAA,OAAO,oBAAoB,CAAC;AACvD,QAAA,OAAO,oBAAoB,CAAC;KAC7B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;;sHA9BU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0QCTtC,+uCAoBM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDXO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,+uCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;MEEI,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAEnB,QAAA,IAAU,CAAA,UAAA,GAAW,6BAA6B,CAAC;AACnD,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AACzB,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;AAC3B,QAAA,IAAQ,CAAA,QAAA,GAAY,IAAI,CAAC;AAEzB,QAAA,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;AAC7B,QAAA,IAAe,CAAA,eAAA,GAAW,MAAM,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAC1C,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAG1C,QAAA,IAAgB,CAAA,gBAAA,GAAyB,EAAE,CAAC;AAC5C,QAAA,IAAoB,CAAA,oBAAA,GAAW,WAAW,CAAC;AAC3C,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AAEnC,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AACnC,QAAA,IAAmB,CAAA,mBAAA,GAAY,KAAK,CAAC;;AAErC,QAAA,IAAqB,CAAA,qBAAA,GAAY,KAAK,CAAC;AACvC,QAAA,IAAgB,CAAA,gBAAA,GAAY,KAAK,CAAC;AAClC,QAAA,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;AACpC,QAAA,IAAoB,CAAA,oBAAA,GAA6B,UAAU,CAAC;AAC5D,QAAA,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;AACxC,QAAA,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;AAGvC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;AAC7C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;AAChD,QAAA,IAAqB,CAAA,qBAAA,GAAY,IAAI,CAAC;AACrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO,CAAC;AAC/C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE1D,QAAA,IAAa,CAAA,aAAA,GAAc,IAAI,SAAS,CAAC;YACvC,SAAS,EAAE,IAAI,WAAW,EAAE;AAC7B,SAAA,CAAC,CAAC;KAiDJ;IA/CC,QAAQ,GAAA;;QACN,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAChE,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,QAAuB,EAAA;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO;AACL,YAAA,GAAG,EAAE,WAAW;YAChB,WAAW,EAAE,IAAI,CAAC,oBAAoB;YACtC,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,UAAU,EAAE,IAAI,CAAC,mBAAmB;YACpC,YAAY,EAAE,IAAI,CAAC,qBAAqB;YACxC,OAAO,EAAE,IAAI,CAAC,gBAAgB;YAC9B,SAAS,EAAE,IAAI,CAAC,kBAAkB;YAClC,WAAW,EAAE,IAAI,CAAC,oBAAoB;YACtC,aAAa,EAAE,IAAI,CAAC,sBAAsB;YAC1C,aAAa,EAAE,IAAI,CAAC,sBAAsB;AAC1C,YAAA,QAAQ,EAAE,CAAC,CAAS,KAAI;;gBACtB,IAAI;AAAE,oBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,CAAC,CAAC,CAAC;AAAE,iBAAA;AAAC,gBAAA,OAAA,EAAA,EAAM,GAAE;AAC7C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC9B;AACD,YAAA,UAAU,EAAE,CAAC,CAAU,KAAI;;gBACzB,IAAI;AAAE,oBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,mBAAmB,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,CAAC,CAAC,CAAC;AAAE,iBAAA;AAAC,gBAAA,OAAA,EAAA,EAAM,GAAE;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aACtC;YACD,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,OAAO,EAAE,IAAI,CAAC,gBAAgB;SAC/B,CAAC;KACH;IAEO,iBAAiB,GAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB;AACvC,cAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACvD,eAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACjD;;qHAtFU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,qwCClBrC,46UAoFM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAD,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAQ,2BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDlEO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;+BACE,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,46UAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACE,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAGE,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAEG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBACE,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACI,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;;;MEhCI,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;;AASW,QAAA,IAAK,CAAA,KAAA,GAAW,UAAU,CAAC;;AAE3B,QAAA,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC;;AAEnB,QAAA,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;;AAE/B,QAAA,IAAM,CAAA,MAAA,GAAyB,SAAS,CAAC;;AAEzC,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;AAC1B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;AAC1B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;AAC1B,QAAA,IAAa,CAAA,aAAA,GAAW,UAAU,CAAC;AACnC,QAAA,IAAa,CAAA,aAAA,GAAW,UAAU,CAAC;AACnC,QAAA,IAAa,CAAA,aAAA,GAAW,WAAW,CAAC;;AAEpC,QAAA,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;AACpB,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AACvB,QAAA,IAAO,CAAA,OAAA,GAAW,IAAI,CAAC;AACvB,QAAA,IAAU,CAAA,UAAA,GAAW,OAAO,CAAC;;AAE7B,QAAA,IAAK,CAAA,KAAA,GAAmB,EAAE,CAAC;;AAE3B,QAAA,IAAO,CAAA,OAAA,GAAW,aAAa,CAAC;;AAEhC,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAE7B,QAAA,IAAY,CAAA,YAAA,GAAW,GAAG,CAAC;AAE1B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAEtC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAE3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAE3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAE3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAGrD,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAC9B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;KAgE9B;AA7DC,IAAA,gBAAgB,CAAC,IAAkB,EAAA;;QACjC,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,SAAS,CAAC;AACxC,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;gBACZ,OAAO,kBAAkB,CAAC;AAC5B,YAAA,KAAK,OAAO;gBACV,OAAO,kBAAkB,CAAC;AAC5B,YAAA;gBACE,OAAO,kBAAkB,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAkB,EAAA;;QAC/B,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,SAAS,CAAC;AACxC,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA;AACE,gBAAA,OAAO,oBAAoB,CAAC;AAC/B,SAAA;KACF;AAED,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AACxE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG,CAAC;KACtB;;AAGD,IAAA,IAAI,cAAc,GAAA;QAChB,MAAM,IAAI,GAAG,iEAAiE,CAAC;QAC/E,IAAI,IAAI,CAAC,WAAW,EAAE;;YAEpB,OAAO,CAAA,EAAG,IAAI,CAAA,yDAAA,CAA2D,CAAC;AAC3E,SAAA;QACD,IAAG,IAAI,CAAC,YAAY,EAAE;YACpB,OAAO,CAAA,EAAG,IAAI,CAAA,wCAAA,CAA0C,CAAC;AAC1D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;;AAG5B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;QAIzB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB,EAAE,GAAG,CAAC,CAAC;KACT;;wHA3GU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,0yBCpBxC,2njBAiKM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAX,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD7IO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACE,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,2njBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;ME9BI,6BAA6B,CAAA;AAP1C,IAAA,WAAA,GAAA;AAQW,QAAA,IAAK,CAAA,KAAA,GAAW,mBAAmB,CAAC;AACpC,QAAA,IAAQ,CAAA,QAAA,GAA0B,EAAE,CAAC;AACrC,QAAA,IAAK,CAAA,KAAA,GAAuB,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA8D,CAAC;KA6FvG;IA3FC,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;KAC9E;AAED,IAAA,YAAY,CAAC,OAA4B,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC;;QAGtB,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK;AACvC,YAAA,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG;YACnC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,GAAG,WAAW;AACpD,SAAA,CAAC,CAAC,CAAC;;AAGJ,QAAA,MAAM,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;AAChF,QAAA,MAAM,iBAAiB,GAAG,sBAAsB,GAAG,WAAW,CAAC;;AAG/D,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAGD,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7B,OAAO,WAAW,GAAG,GAAG,CAAC;AAC1B,SAAA;;;AAID,QAAA,MAAM,cAAc,GAAG,GAAG,GAAG,iBAAiB,CAAC;AAC/C,QAAA,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;;QAGhG,IAAI,wBAAwB,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;AAC7D,SAAA;;QAGD,MAAM,SAAS,GAAG,CAAC,YAAY,CAAC,UAAU,GAAG,wBAAwB,IAAI,cAAc,CAAC;QAExF,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;KAC/C;IAED,YAAY,CAAC,OAA4B,EAAE,QAAgB,EAAA;AACzD,QAAA,OAAO,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AACnD,QAAA,IAAI,eAAe,KAAK,KAAK,IAAI,eAAe,KAAK,OAAO,EAAE;AAC5D,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;aAAM,IAAI,eAAe,KAAK,SAAS,EAAE;AACxC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,gBAAgB,CAAC,IAAsB,EAAA;;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;aAAM,IAAI,KAAK,KAAK,KAAK,EAAE;AAC1B,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,OAAO,SAAS,CAAC;KAClB;AAED;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;KAC3D;IAED,WAAW,CAAC,IAAsB,EAAE,KAAY,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B;AAED,IAAA,YAAY,CAAC,MAAwB,EAAE,KAA4B,EAAE,KAAY,EAAA;QAC/E,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACzC;;0HAjGU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,6BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,4OC9B1C,ouJA+DM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDjCO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,ouJAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;ME1BI,4BAA4B,CAAA;AAPzC,IAAA,WAAA,GAAA;;AASW,QAAA,IAAK,CAAA,KAAA,GAAW,kBAAkB,CAAC;;AAInC,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;;AAErB,QAAA,IAAa,CAAA,aAAA,GAAW,UAAU,CAAC;;AAEnC,QAAA,IAAS,CAAA,SAAA,GAAW,qCAAqC,CAAC;;AAI1D,QAAA,IAAc,CAAA,cAAA,GAAW,YAAY,CAAC;;AAEtC,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;;AAI9B,QAAA,IAAe,CAAA,eAAA,GAAW,aAAa,CAAC;;AAExC,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;;AAEvB,QAAA,IAAe,CAAA,eAAA,GAAW,oBAAoB,CAAC;;AAE/C,QAAA,IAAI,CAAA,IAAA,GAAa,EAAE,CAAC;;AAEnB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;KAkDhD;AAhDC,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACpD,YAAA,OAAO,yBAAyB,CAAC;AAClC,SAAA;;AAED,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KAC9B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,KAAK,CAAC,eAAe,EAAE,CAAC;;QAGxB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC;AAEhD,QAAA,IAAI,SAAS,CAAC,SAAS,IAAI,UAAU,EAAE;AACrC,YAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AACtD,gBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;;AAE5C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC3C,aAAC,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC1C,SAAA;KACF;AAEO,IAAA,uBAAuB,CAAC,IAAY,EAAA;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACpD,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;AAClC,QAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;AAClC,QAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC;AACjC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;QAElB,IAAI;AACF,YAAA,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;AAC7C,SAAA;AAAS,gBAAA;AACR,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrC,SAAA;KACF;;yHA7EU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,ofCTzC,+sGAmDM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD1CO,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,+sGAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;MEpBI,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AACtB,QAAA,IAAK,CAAA,KAAA,GAAyB,EAAE,CAAC;;AAEjC,QAAA,IAAY,CAAA,YAAA,GAAyB,EAAE,CAAC;;AAExC,QAAA,IAAgB,CAAA,gBAAA,GAAG,uCAAuC,CAAC;AAE1D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;KASjD;AAPC,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KAC3D;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACpG;;qHAlBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,4TCjBrC,m+EA6CM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD5BO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;+BACE,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,QACzC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,m+EAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;AE3BT;;;;;AAKG;AAEH;AACA,MAAM,qBAAqB,GAAG;AAC5B,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG;AAC1B,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,SAAS;CAC1B,CAAC;AAEF,MAAM,mBAAmB,GAAG;AAC1B,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,MAAM,4BAA4B,GAAG,SAAS,CAAC;AAQ/C;;AAEG;AACU,MAAA,eAAe,GAAqB;IAC/C,UAAU,EAAE,qBAAqB,CAAC,QAAQ;IAC1C,OAAO,EAAE,qBAAqB,CAAC,KAAK;IACpC,QAAQ,EAAE,qBAAqB,CAAC,MAAM;IACtC,OAAO,EAAE,qBAAqB,CAAC,KAAK;AACpC,IAAA,SAAS,EAAE,qBAAqB,CAAC,SAAS,CAAC;EAC3C;AAEF;;AAEG;AACU,MAAA,aAAa,GAAqB;IAC7C,QAAQ,EAAE,mBAAmB,CAAC,MAAM;IACpC,QAAQ,EAAE,mBAAmB,CAAC,MAAM;IACpC,SAAS,EAAE,mBAAmB,CAAC,OAAO;AACtC,IAAA,WAAW,EAAE,mBAAmB,CAAC,WAAW,CAAC;AAC7C,IAAA,cAAc,EAAE,mBAAmB,CAAC,cAAc,CAAC;EACnD;AAEF;;AAEG;AACU,MAAA,aAAa,GAAqB;IAC7C,QAAQ,EAAE,mBAAmB,CAAC,MAAM;IACpC,UAAU,EAAE,mBAAmB,CAAC,QAAQ;IACxC,SAAS,EAAE,mBAAmB,CAAC,OAAO;IACtC,WAAW,EAAE,mBAAmB,CAAC,SAAS;EAC1C;AAEF;;AAEG;AACI,MAAM,sBAAsB,GAAG,6BAA6B;AAEnE;;;;;AAKG;AACa,SAAA,gBAAgB,CAC9B,GAAW,EACX,KAAqE,EAAA;;AAGrE,IAAA,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;;AAG/C,IAAA,IAAI,QAAsC,CAAC;AAE3C,IAAA,QAAQ,aAAa;AACnB,QAAA,KAAK,UAAU;YACb,QAAQ,GAAG,eAAe,CAAC;YAC3B,MAAM;AACR,QAAA,KAAK,QAAQ;YACX,QAAQ,GAAG,aAAa,CAAC;YACzB,MAAM;AACR,QAAA,KAAK,QAAQ;YACX,QAAQ,GAAG,aAAa,CAAC;YACzB,MAAM;AACR,QAAA;AACE,YAAA,OAAO,sBAAsB,CAAC;AACjC,KAAA;;AAGD,IAAA,OAAO,QAAQ,CAAC,eAAe,CAAC,IAAI,sBAAsB,CAAC;AAC7D,CAAC;AAED;;;;;AAKG;AACa,SAAA,qBAAqB,CACnC,GAAW,EACX,KAAqE,EAAA;IAErE,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;AACjD;;MChHa,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;AAMW,QAAA,IAAI,CAAA,IAAA,GAAc,SAAS,CAAC;AAC5B,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAEnB,QAAA,IAAW,CAAA,WAAA,GAAiB,KAAK,CAAC;AAClC,QAAA,IAAO,CAAA,OAAA,GAAiB,SAAS,CAAC;AAClC,QAAA,IAAI,CAAA,IAAA,GAAc,QAAQ,CAAC;KA+KrC;AAhKC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,WAAW,GAAG;YAClB,iBAAiB;YACjB,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;YACnB,iBAAiB;SAClB,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAC/G,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AACnF,SAAA;AAAM,aAAA;;YAEL,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AACnF,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACpD,SAAA;;QAGD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC5C,QAAQ,IAAI,CAAC,OAAO;AAClB,gBAAA,KAAK,OAAO;AACV,oBAAA,OAAO,CAAC,GAAG,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9E,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,CAAC,GAAG,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9E,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,CAAC,GAAG,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5E,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,CAAC,GAAG,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9E,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,CAAC,GAAG,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,gBAAA;AACE,oBAAA,OAAO,CAAC,GAAG,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,aAAA;AACF,SAAA;;AAGD,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,MAAM,GAA8B,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AACnD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AACrC,YAAA,MAAM,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC;AAC5C,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAClC,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1C,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;AAC/B,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC;AAClC,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,MAAM,WAAW,GAAG;YAClB,iBAAiB;YACjB,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;SACpB,CAAC;AAEF,QAAA,IAAG,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC9B,YAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9B,SAAA;AAAM,aAAA;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAChC,SAAA;;AAGD,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,MAAM,MAAM,GAA8B;AACxC,YAAA,SAAS,EAAE,aAAa;AACxB,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,iBAAiB,EAAE,QAAQ;SAC5B,CAAC;;QAGF,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;;AAEtD,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;AACzB,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;AAC1B,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;AAC7B,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;AAC9B,YAAA,MAAM,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;AACjC,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,WAAW,GAAa,EAAE,CAAC;;AAGjC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO,CAAC,GAAG,WAAW,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,SAAA;AAED,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,IAAI,QAAQ,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;YAC/B,QAAQ,GAAG,MAAM,CAAC;AACnB,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,QAAQ,GAAG,MAAM,CAAC;AACnB,SAAA;;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC1C,YAAA,QAAQ,GAAG,CAAG,EAAA,IAAI,CAAC,QAAQ,IAAI,CAAC;AACjC,SAAA;AAED,QAAA,MAAM,MAAM,GAA8B;AACxC,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,aAAa,EAAE,QAAQ;SACxB,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAClC,SAAA;AAAM,aAAA;;YAEL,QAAQ,IAAI,CAAC,OAAO;AAClB,gBAAA,KAAK,OAAO;AACV,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;oBAC5B,MAAM;AACR,gBAAA,KAAK,SAAS;AACZ,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;oBAC5B,MAAM;AACR,gBAAA,KAAK,MAAM;AACT,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;oBAC5B,MAAM;AACR,gBAAA,KAAK,SAAS;AACZ,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;oBAC5B,MAAM;AACR,gBAAA;oBACE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;AACjD,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;;2GApLU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,mdCX3B,2tDAkDA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvCa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,WAAW,EAAA,QAAA,EAAA,2tDAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKZ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;;;MEJK,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;AAOmB,QAAA,IAAiB,CAAA,iBAAA,GAAG,8BAA8B,CAAC;AACnD,QAAA,IAAqB,CAAA,qBAAA,GAAG,4BAA4B,CAAC;AACrD,QAAA,IAAsB,CAAA,sBAAA,GAAG,0BAA0B,CAAC;AAE5D,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AACnB,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;;AAEzB,QAAA,IAAsB,CAAA,sBAAA,GAAY,IAAI,CAAC;AACxC,QAAA,IAAO,CAAA,OAAA,GAAmB,EAAE,CAAC;AAW5B,QAAA,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;AACjC,QAAA,IAAqB,CAAA,qBAAA,GAAY,KAAK,CAAC;AACvC,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;;AAGpC,QAAA,IAAA,CAAA,oBAAoB,GAAyB,IAAI,GAAG,EAAE,CAAC;;AAG/D,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAElB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW,CAAC;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAqC,CAAC;AACtE,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU,CAAC;AAChD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAClD,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,YAAY,EAAQ,CAAC;AACtD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAQ,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;KA8LzD;IAxNC,IACI,MAAM,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;AACD,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAsBD,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACjD;AAED,IAAA,aAAa,CAAC,OAA+B,EAAA;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC9D,QAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACpD,QAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;KACjE;AAED,IAAA,eAAe,CAAC,SAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;QAGxC,IAAI,SAAS,KAAK,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;AACxC,SAAA;aAAM,IAAI,SAAS,KAAK,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;AACnC,SAAA;KACF;AAED,IAAA,IAAI,aAAa,GAAA;QACf,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACrE,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAChE,SAAA;;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,MAAM,OAAO,GAA6B,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,aAAa,CAAC;AACjB,gBAAA,EAAE,EAAE,cAAc;AAClB,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,MAAM,EAAE,IAAI,CAAC,mBAAmB,IAAI,+BAA+B;AACnE,gBAAA,iBAAiB,EAAE,sBAAsB;AAC1C,aAAA,CAAC,CACH,CAAC;AACH,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,aAAa,CAAC;AACjB,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,IAAI,uBAAuB;AACvD,gBAAA,iBAAiB,EAAE,kBAAkB;AACtC,aAAA,CAAC,CACH,CAAC;AACH,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;IAEK,YAAY,GAAA;;YAChB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,IAAI;AACF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;AACpC,aAAA;AAAS,oBAAA;;;;AAIR,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACzB,aAAA;SACF,CAAA,CAAA;AAAA,KAAA;;IAGD,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;;IAID,gBAAgB,CAAC,MAAc,EAAE,OAA+B,EAAA;QAC9D,OAAO,OAAO,CAAC,EAAE,CAAC;KACnB;AAED,IAAA,qBAAqB,CAAC,OAA+B,EAAA;QACnD,QAAQ,OAAO,CAAC,OAAO;AACrB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,wCAAwC,CAAC;AAClD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,qCAAqC,CAAC;AAC/C,YAAA;AACE,gBAAA,OAAO,sCAAsC,CAAC;AACjD,SAAA;KACF;IAED,uBAAuB,CAAC,GAAW,EAAE,KAAqE,EAAA;;AAExG,QAAA,OAAO,wDAAwD,CAAC;KACjE;AAED,IAAA,gBAAgB,CAAC,KAAqE,EAAA;AACpF,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;KACpB;AAED,IAAA,cAAc,CAAC,KAA+F,EAAA;AAC5G,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;KAC/B;IAED,UAAU,CAAC,GAAW,EAAE,KAA+F,EAAA;AACrH,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,SAAA;KACF;IAED,qBAAqB,CAAC,GAAW,EAAE,KAAqE,EAAA;;AAEtG,QAAA,OAAOe,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC1C;AAED,IAAA,sBAAsB,CAAC,OAA+B,EAAA;QACpD,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QAE/E,QAAQ,OAAO,CAAC,OAAO;AACrB,YAAA,KAAK,SAAS;gBACZ,OAAO,CAAC,GAAG,WAAW,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAA,KAAK,OAAO;gBACV,OAAO,CAAC,GAAG,WAAW,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE1D,YAAA;gBACE,OAAO,CAAC,GAAG,WAAW,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,OAA+B,EAAA;QACjD,QAAQ,OAAO,CAAC,OAAO;AACrB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA;AACE,gBAAA,OAAO,mBAAmB,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,OAA+B,EAAA;QAChD,OAAO,CAAA,EAAG,IAAI,CAAC,qBAAqB,IAAI,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;KACtD;AAED,IAAA,mBAAmB,CAAC,OAA+B,EAAA;QACjD,OAAO,CAAA,EAAG,IAAI,CAAC,sBAAsB,IAAI,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;KACvD;IAED,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;AAEO,IAAA,uBAAuB,CAAC,SAAiB,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC;cAC3C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAE;cACzC,IAAI,CAAC;KACV;AAEO,IAAA,aAAa,CAAC,MAAgD,EAAA;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,OACK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,MAAM,CACT,EAAA,EAAA,QAAQ,EACR,CAAA,CAAA;KACH;;iHAjOU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,4vBC1BjC,msaAoJA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAhB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAiB,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAZ,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,UAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,EAAA,CAAA,CAAA;2FD1Ha,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAGtB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,msaAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAOrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBAGF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAQI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,sBAAsB,EAAA,CAAA;sBAA/B,MAAM;gBACG,0BAA0B,EAAA,CAAA;sBAAnC,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;;;MEhDI,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;AAOW,QAAA,IAAK,CAAA,KAAA,GAAW,kBAAkB,CAAC;AACnC,QAAA,IAAO,CAAA,OAAA,GAAqB,EAAE,CAAC;AAE/B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAGzB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAK5C,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AAChB,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;KAoKtC;AAlKC,IAAA,IAAI,YAAY,GAAA;QACd,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YACnE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;AAClF,YAAA,OAAO,cAAc,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC;KACvC;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;YAClB,SAAS;YACT,UAAU;YACV,UAAU;YACV,iBAAiB;YACjB,mBAAmB;YACnB,aAAa;YACb,eAAe;YACf,2BAA2B;YAC3B,sBAAsB;YACtB,iBAAiB;YACjB,oBAAoB;YACpB,kBAAkB;YAClB,WAAW;YACX,oBAAoB;YACpB,uBAAuB;SACxB,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;AAC9D,SAAA;AAAM,aAAA;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC/C,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACrC,SAAA;AAED,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO;YACL,iBAAiB;YACjB,oBAAoB;YACpB,mBAAmB;YACnB,aAAa;YACb,iBAAiB;YACjB,eAAe;AAChB,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACb;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,WAAW,GAAG;YAClB,SAAS;YACT,SAAS;YACT,cAAc;YACd,0BAA0B;SAC3B,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,cAAc,CAAC,KAAkB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;AAE1B,QAAA,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;;QAG3B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,aAAA;SACF,EAAE,GAAG,CAAC,CAAC;KACT;IAED,YAAY,CAAC,MAAsB,EAAE,KAAkB,EAAA;QACrD,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO;AAE5B,QAAA,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;;QAGnB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B,EAAE,GAAG,CAAC,CAAC;KACT;IAED,cAAc,GAAA;;AACZ,QAAA,IAAI,MAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC;AAC3D,YAAA,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;AAChC,SAAA;QACD,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,gBAAgB,CAAC,MAAsB,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG;YAClB,WAAW;YACX,gBAAgB;YAChB,iBAAiB;YACjB,mBAAmB;YACnB,kBAAkB;YAClB,oBAAoB;YACpB,uBAAuB;SACxB,CAAC;QAEF,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;AAC9D,SAAA;AAAM,aAAA;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAC9C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK,EAAE;AACvC,YAAA,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC5C,SAAA;AAED,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAGD,IAAA,eAAe,CAAC,KAAiB,EAAA;;QAE/B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO;AACR,SAAA;;QAGD,UAAU,CAAC,MAAK;;YACd,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;AAEzB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;;AAG3C,YAAA,IAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC3D,OAAO;AACR,aAAA;;AAGD,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACpB,EAAE,GAAG,CAAC,CAAC;KACT;;oHAlLU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,glBCdpC,guEA2DA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ca,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAGzB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,guEAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAE4C,iBAAiB,EAAA,CAAA;sBAAnE,SAAS;gBAAC,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBACF,aAAa,EAAA,CAAA;sBAA3D,SAAS;gBAAC,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAiJ7C,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME9J/B,yBAAyB,CAAA;AARtC,IAAA,WAAA,GAAA;AASW,QAAA,IAAI,CAAA,IAAA,GAAyB,OAAO,CAAC;AACrC,QAAA,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;AAClB,QAAA,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;AACpB,QAAA,IAAA,CAAA,QAAQ,GAAW,CAAC,CAAC;KAsB/B;AApBC,IAAA,IAAI,oBAAoB,GAAA;QACtB,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;AAC3C,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;AAC3C,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;AAC3C,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;AAC3C,YAAA;AACE,gBAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;AAC5C,SAAA;KACF;AAED,IAAA,IAAI,aAAa,GAAA;;AAEf,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClE,OAAO,CAAA,EAAG,eAAe,CAAA,CAAA,CAAG,CAAC;KAC9B;;sHAzBU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,iNCZtC,kyCA0BA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDda,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAG7B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,kCAAkC;qBAC1C,EAAA,QAAA,EAAA,kyCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEUK,sBAAsB,CAAA;AA6GjC,IAAA,WAAA,CAAoB,GAAsB,EAAA;AAAtB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;;AA3GjC,QAAA,IAAiB,CAAA,iBAAA,GAAW,mBAAmB,CAAC;AAChD,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AACzB,QAAA,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;AAC1B,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;;AAG7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;;AAG5C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAO,CAAC;AAC7C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO,CAAC;;AAGtC,QAAA,IAAY,CAAA,YAAA,GAAwB,EAAE,CAAC;AACvC,QAAA,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;AACjC,QAAA,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;;AAGjC,QAAA,IAAgB,CAAA,gBAAA,GAAW,cAAc,CAAC;AAC1C,QAAA,IAAkB,CAAA,kBAAA,GAAyE,QAAQ,CAAC;AACpG,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;;AAGhC,QAAA,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;;AAGjC,QAAA,IAAkB,CAAA,kBAAA,GAAY,IAAI,CAAC;AACnC,QAAA,IAAqB,CAAA,qBAAA,GAAY,IAAI,CAAC;;AAGtC,QAAA,IAAI,CAAA,IAAA,GAAU,EAAE,CAAC;;AAGjB,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAA,CAAA,gBAAgB,GAAqB;AAC5C,YAAA,KAAK,EAAE,uBAAuB;AAC9B,YAAA,WAAW,EAAE,uIAAuI;YACpJ,QAAQ,EAAE,kBAAkB,CAAC,SAAS;YACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;SAC1D,CAAC;;QAGO,IAAA,CAAA,OAAO,GAAkB;AAChC,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,OAAO,EAAE,CAAC,OAAO,KAAI;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;iBAChD;AACF,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,OAAO,EAAE,CAAC,OAAO,KAAI;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;iBAC9C;AACF,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,OAAO,EAAE,CAAC,OAAO,KAAI;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;iBACjD;AACF,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,YAAY;AAChB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,OAAO,EAAE,CAAC,OAAO,KAAI;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;iBACpD;AACF,aAAA;SACF,CAAC;;AAGO,QAAA,IAAK,CAAA,KAAA,GAAgG,EAAE,CAAC;AACxG,QAAA,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;;AAG/B,QAAA,IAAO,CAAA,OAAA,GAAyB,EAAE,CAAC;AACnC,QAAA,IAA2B,CAAA,2BAAA,GAAW,CAAC,CAAC;AACxC,QAAA,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;;AAEtB,QAAA,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;AACtC,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA2C,CAAC;;;AAO3E,QAAA,IAAiB,CAAA,iBAAA,GAA2B,EAAE,CAAC;AAC/C,QAAA,IAAwB,CAAA,wBAAA,GAAyC,EAAE,CAAC;AAC5E,QAAA,IAAY,CAAA,YAAA,GAAU,EAAE,CAAC;AACzB,QAAA,IAAS,CAAA,SAAA,GAAU,EAAE,CAAC;AAMZ,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAGxD,QAAA,IAAe,CAAA,eAAA,GAAyB,EAAE,CAAC;;AAE3C,QAAA,IAAiB,CAAA,iBAAA,GAAyC,EAAE,CAAC;KAVf;IAYtC,qBAAqB,GAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;AAChD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAG;AACtC,YAAA,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACjD,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrC,YAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,GAAG,CAAE,EAAA,EAAA,MAAM,EAAE,IAAI,KAAK,KAAK,EAAG,CAAA,CAAA;AAC5C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAEO,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC;AACvD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;;AAGD,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;IACD,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YAC9C,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAChC,SAAA;KACF;IAEO,mBAAmB,GAAA;QACzB,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,OAAO;AACR,SAAA;;QAGD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,OAAO;AACR,SAAA;QAED,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAEO,0BAA0B,GAAA;;AAEhC,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAE5D,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/C,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;gBAChD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACvC,aAAA;AACF,SAAA;KACF;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAE,CAAS,CAAC,UAAU,CAAC,CAAC,CAAC;KAChF;AAED,IAAA,IAAI,oBAAoB,GAAA;QACtB,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAE,CAAS,CAAC,UAAU,CAAC,CAAC;KACpE;AAED,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;KACrC;AAED,IAAA,IAAI,CAAC,EAAmB,EAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KACzB;AAED,IAAA,IAAI,CAAC,GAAQ,EAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC1B;AAED,IAAA,MAAM,CAAC,GAAQ,EAAA;AACb,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC5B;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;KAC9C;AAED,IAAA,wBAAwB,CAAC,GAA2B,EAAA;AAClD,QAAA,IAAI,CAAC,iBAAiB,GAAQ,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,GAAG,CAAE,CAAC;QACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,mBAAmB,CAAC,UAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,2BAA2B,GAAG,UAAU,CAAC;AAC9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;AAED,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC9B;IAED,OAAO,GAAA;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;KACxB;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;QACvB,IAAI,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,KAAK,MAAK,cAAc,EAAE;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,OAAY,EAAA;;AAE3B,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;KAC/B;AAED,IAAA,gBAAgB,CAAC,OAAY,EAAA;;AAC3B,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAP,OAAO,GAAI,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,KAAK,GAAgG,EAAE,CAAC;AAC9G,QAAA,IAAI,SAAS,EAAE;YACb,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxC,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;oBAAE,SAAS;gBAC5F,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACxB,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA,CAAA,QAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAD,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAC,CAAE,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,aAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAE,KAAK,mCAAI,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,EAAC,EAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,iBAAA;AAAM,qBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACpC,oBAAA,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;wBACtC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;wBACxE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;AACpE,wBAAA,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,IAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,KAAK,mCAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/E,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,iBAAA;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC;AACtE,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5C;IAED,sBAAsB,GAAA;;AAEpB,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KAChC;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa,GAAA;;QACnB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;AAEO,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,MAAK;gBACvC,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB,EAAE,UAAU,CAAC,CAAC;AAChB,SAAA;KACF;IAEO,gBAAgB,GAAA;QACtB,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;AAED,IAAA,UAAU,CAAC,CAA0C,EAAA;AACnD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3B,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,OAAO;AACR,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AAED,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,OAAO;AACR,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;AAED,IAAA,YAAY,CAAC,IAAS,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;;AAE3C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;IAEO,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,oBAAoB,EAAE;;YAE7B,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO;AACR,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACtD;IAEO,oBAAoB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;aACvB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;aAClC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KACnE;AAEO,IAAA,aAAa,CAAC,CAAM,EAAA;AAC1B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;KAC9B;IAEO,WAAW,CAAC,OAAY,EAAE,GAAQ,EAAA;AACxC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;AACxD,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;AAChE,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;AAC5D,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AACpF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,gBAAA,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,OAAO;AAAE,oBAAA,OAAO,KAAK,CAAC;AACrD,gBAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,KAAK;AAAE,oBAAA,OAAO,KAAK,CAAC;AAClD,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;mHAzZU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,2xCC1BnC,2vJAqHA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAgB,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,cAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD3Fa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;+BACE,oBAAoB,EAAA,IAAA,EAGxB,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,eAAA,EACb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2vJAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;wGAItC,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAGG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAGE,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAGG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAQG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAwCG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,2BAA2B,EAAA,CAAA;sBAAnC,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEE,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAaI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;;;AEzIT;;;;;;AAMG;AAEG,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAD9D,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAa,CAAA,aAAA,GAAkB,IAAI,CAAC;KAqE7C;IAnEoB,gBAAgB,GAAA;QACjC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,iBAAiB,EAAE;;YAE1B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;;YAGvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;KACF;IAEO,mBAAmB,GAAA;QACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;AAEpC,QAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;;AAEzC,YAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC/B,gBAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,aAAA;AACD,YAAA,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,MAAK;gBAC9C,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACvC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,OAAO,CAAC;AAC3B,SAAA,CAAC,CAAC;;QAGH,qBAAqB,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;KAC9D;IAEO,wBAAwB,GAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;;QAGpC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAE9E,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;;YAExB,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAC3C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC;AAC9C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAC3C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;;;YAI5E,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;YAChF,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;YAChF,MAAM,0BAA0B,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;AAExF,YAAA,MAAM,gBAAgB,GAAG,mBAAmB,IAAI,sBAAsB;gBAC7C,sBAAsB,IAAI,0BAA0B,CAAC;AAE9E,YAAA,IAAI,gBAAgB,EAAE;;AAEpB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACnC,aAAA;AAAM,iBAAA;;AAEL,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;qHArEU,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yHAAxB,wBAAwB,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;ACRJ,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAyB,oBAAoB,CAAC;;ACClG;;;AAGG;MAKmB,iBAAiB,CAAA;AAJvC,IAAA,WAAA,GAAA;AAMY,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW,CAAC;AAEvD,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;KA8D7B;IA5DC,QAAQ,GAAA;;QACN,IAAI,CAAC,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC;KACjD;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC3C;AAED,IAAA,aAAa,CAAC,MAAkB,EAAA;AAC9B,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc,CAAC;AACxB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ,CAAC;AAClB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,UAAU,CAAC;AACpB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,MAAM,CAAC;AAChB,YAAA;AACE,gBAAA,OAAO,cAAc,CAAC;AACzB,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,MAAkB,EAAA;AACpC,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,kBAAkB,CAAC;AAC5B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,mBAAmB,CAAC;AAC7B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,mBAAmB,CAAC;AAC7B,YAAA;AACE,gBAAA,OAAO,mBAAmB,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,qBAAqB,CAAC,MAAkB,EAAA;AACtC,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,iBAAiB,CAAC;AAC3B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,eAAe,CAAC;AACzB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,gBAAgB,CAAC;AAC1B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,gBAAgB,CAAC;AAC1B,YAAA;AACE,gBAAA,OAAO,gBAAgB,CAAC;AAC3B,SAAA;KACF;AAED,IAAA,cAAc,CAAC,OAAe,EAAA;QAC5B,IAAI,OAAO,GAAG,CAAC,EAAE;AACf,YAAA,OAAO,CAAG,EAAA,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;AAC3C,SAAA;QACD,OAAO,CAAA,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;KACjC;;8GAjEmB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,kIAF3B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAEQ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE,EAAE;iBACb,CAAA;8BAEU,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,cAAc,EAAA,CAAA;sBAAvB,MAAM;;;MCJI,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;AAaY,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAkB,CAAC;KA0BvD;IArBC,QAAQ,GAAA;;QAEN,IAAI,CAAC,IAAI,GAAG;YACV,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;KACH;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KACnC;;sHAhCU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0QCTtC,s0VA4EA,EAAA,CAAA,CAAA;2FDnEa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAG5B,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,s0VAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,MAAM,EAAA,CAAA;sBAAf,MAAM;;;AENH,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;IAiB9C,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACL,CAAC;QAErB,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KAClD;AAED,IAAA,gBAAgB,CAAC,MAAsB,EAAA;AACrC,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,MAAM;AACR,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,MAAM;AACR,YAAA,KAAK,eAAe;gBAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM;AACT,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;KACtC;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;KACtC;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;KAC/C;;+GAjEU,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,oZCV/B,izJAiFA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA5B,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGpB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,izJAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;;;AElBR;;;;AAIG;MAKU,qBAAqB,CAAA;AAIhC,IAAA,WAAA,CACsC,YAAoC,EAAA;AAApC,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAwB;KACtE;AAEJ,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;IAED,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;AAE1C,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE5D,QAAA,IAAI,aAAa,EAAE;YACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACnE,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;;;AAIvC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;gBACnC,IAAI,GAAG,KAAK,MAAM,EAAE;oBACjB,QAAgB,CAAC,GAAG,CAAC,GAAI,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC;AAClD,iBAAA;AACH,aAAC,CAAC,CAAC;;YAGH,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACvB,gBAAA,QAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;AACtC,aAAA;AACF,SAAA;KACF;;AAzCU,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAKtB,kBAAkB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGALjB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEA,gBAAgB,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJtC,0CAA0C,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAEzC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,0CAA0C;iBACrD,CAAA;;wBAMqD,GAAG,EAAA,UAAA,EAAA,CAAA;8BAApD,MAAM;+BAAC,kBAAkB,CAAA;;yBAJnB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAC8C,SAAS,EAAA,CAAA;sBAA5D,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;;;ACL9C,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;AANzD,IAAA,WAAA,GAAA;;;AAmBY,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;KAmC/C;IA9BU,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACL,CAAC;QAErB,KAAK,CAAC,QAAQ,EAAE,CAAC;;AAEjB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,SAAA;KACF;IAEQ,MAAM,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,KAAK,CAAC,MAAM,EAAE,CAAC;;AAEf,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACtB,SAAA;KACF;;+GA/CU,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,mWCV/B,6wIA0CA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA6B,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA7B,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDhCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGpB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,6wIAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAGI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;AEbH,MAAO,iBAAkB,SAAQ,iBAAiB,CAAA;AANxD,IAAA,WAAA,GAAA;;;AAuBY,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAGpC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAKzD,QAAA,IAAiB,CAAA,iBAAA,GAAyB,IAAI,CAAC;KAoEhD;IAlEU,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACN,CAAC;QAEpB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAEQ,MAAM,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,KAAK,CAAC,MAAM,EAAE,CAAC;;AAEf,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACtB,SAAA;KACF;IAED,sBAAsB,GAAA;QACpB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC3C,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,mBAAmB,CAC7C,IAAI,IAAI,CAAC;AACX,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7C,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,WAAmB,EAAA;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC;KACxF;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,MAAM,GAAa,CAAC,MAAM,CAAC,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC3B,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;AACpC,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,iBAAiB,CAAC,SAAwB,EAAA;QACxC,OAAO,SAAS,CAAC,KAAK,CAAC;KACxB;AAED,IAAA,wBAAwB,CAAC,KAAY,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;KACjC;;8GA5FU,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ojBCV9B,s+UAgIA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA6B,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA7B,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDtHa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAGnB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,s+UAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAGI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAGG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;;;AEpBH,MAAO,sBAAuB,SAAQ,iBAAiB,CAAA;IAelD,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,WAAW;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACD,CAAC;QAEzB,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;IAED,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;KAC9D;IAED,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KACzD;IAED,eAAe,CAAC,QAAe,EAAE,OAAY,EAAA;QAC3C,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACtC;;mHA3CU,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,kVCVnC,q9NAiGA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvFa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAGxB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,q9NAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEXK,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;AASW,QAAA,IAAgB,CAAA,gBAAA,GAAa,IAAI,CAAC;AAEjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAQ,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ,CAAC;AAC1C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAQ,CAAC;KAgCnD;IA9BC,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC5B;IAED,SAAS,GAAA;AACP,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,QAAQ,KAAK;AACX,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,qCAAqC,CAAC;AAC/C,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,qCAAqC,CAAC;AAC/C,YAAA;AACE,gBAAA,OAAO,qCAAqC,CAAC;AAChD,SAAA;KACF;;sHAvCU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,iUCTtC,yyfAgGA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvFa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAG3B,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,yyfAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;;;AEPH,MAAO,mBAAoB,SAAQ,iBAAiB,CAAA;IAe/C,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACJ,CAAC;QAEtB,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;KAC9C;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;KACxC;IAED,SAAS,GAAA;AACP,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;KAChC;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;KACvC;;gHA/CU,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,iVCVhC,qukBA6HM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA4B,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA9B,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDnHO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAGrB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,qukBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;;;AEVF,MAAO,oBAAqB,SAAQ,iBAAiB,CAAA;AAN3D,IAAA,WAAA,GAAA;;AAwBE,QAAA,IAAW,CAAA,WAAA,GAAyD,cAAc,CAAC;KA8CpF;IA5CU,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,WAAW,EAAE,IAAI,CAAC,gBAAgB;YAClC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACH,CAAC;QAEvB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC;KAC9D;AAED,IAAA,SAAS,CAAC,GAAyD,EAAA;AACjE,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;KACxB;AAED,IAAA,aAAa,CAAC,UAAkC,EAAA;QAC9C,OAAO,UAAU,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;KACtD;AAED,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACJ;IAED,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,MAAM,OAAO,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,MAAM,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC/B,SAAA;KACF;;iHA/DU,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,iaCVjC,2/XAgJA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDtIa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAGvB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,2/XAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;;;AEbF,MAAO,gBAAiB,SAAQ,iBAAiB,CAAA;IAqB5C,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACP,CAAC;QAEnB,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE;AACjE,YAAA,OAAO,qCAAqC,CAAC;AAC9C,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE;AACxE,YAAA,OAAO,uCAAuC,CAAC;AAChD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,iCAAiC,CAAC;AAC1C,SAAA;KACF;AAED,IAAA,UAAU,CAAC,GAAQ,EAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACrC;IAED,mBAAmB,GAAA;;QACjB,OAAO,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAE,CAAA,MAAM,KAAI,CAAC,CAAC;KAC/E;IAED,mBAAmB,GAAA;;QACjB,OAAO,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAE,CAAA,MAAM,KAAI,CAAC,CAAC;KAC/E;AAED,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACJ;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACrC,SAAA;KACF;IAED,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACrC,SAAA;KACF;;6GAvFU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,4eCV7B,45dA8LA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDpLa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAGlB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,45dAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;;;AEhBF,MAAO,yBAA0B,SAAQ,iBAAiB,CAAA;IAkBrD,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACE,CAAC;QAE5B,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;IAED,qBAAqB,GAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,YAAA,OAAO,iCAAiC,CAAC;AAC1C,SAAA;aAAM,IAAI,IAAI,KAAK,KAAK,EAAE;AACzB,YAAA,OAAO,qCAAqC,CAAC;AAC9C,SAAA;AAAM,aAAA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AAC9C,YAAA,OAAO,mCAAmC,CAAC;AAC5C,SAAA;AACD,QAAA,OAAO,mCAAmC,CAAC;KAC5C;IAED,UAAU,GAAA;;QAER,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9C;AAED,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACJ;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC,SAAA;KACF;;sHApEU,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,kZCVtC,uxcAqIA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD3Ha,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAG5B,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,uxcAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;AEbF,MAAO,iCAAkC,SAAQ,iBAAiB,CAAA;IAgB7D,QAAQ,GAAA;;QAEf,IAAI,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,uBAAuB;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACU,CAAC;QAEpC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;AAED,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;KACJ;;8HAvCU,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,iCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,gaCV9C,+raAwJA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD9Ia,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAGpC,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,+raAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;;;MELK,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;AAOW,QAAA,IAAK,CAAA,KAAA,GAAW,eAAe,CAAC;AAEhC,QAAA,IAAQ,CAAA,QAAA,GAAY,IAAI,CAAC;AAExB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAoB,CAAC;AAE3D,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;KAqC5B;IAnCC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;KACjC;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;AAED,IAAA,cAAc,CAAC,OAAe,EAAA;QAC5B,IAAI,OAAO,GAAG,CAAC,EAAE;AACf,YAAA,OAAO,CAAG,EAAA,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;AAC3C,SAAA;QACD,OAAO,CAAA,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;KACjC;AAED,IAAA,aAAa,CAAC,MAAkB,EAAA;AAC9B,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc,CAAC;AACxB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ,CAAC;AAClB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,UAAU,CAAC;AACpB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,MAAM,CAAC;AAChB,YAAA;AACE,gBAAA,OAAO,cAAc,CAAC;AACzB,SAAA;KACF;IAGD,WAAW,CAAC,IAAsB,EAAE,KAAY,EAAA;QAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B;;sHA3CU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,4NChBtC,69QAuGM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvFO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAG5B,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,69QAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAGrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;MEJI,kBAAkB,CAAA;AAL/B,IAAA,WAAA,GAAA;AAOW,QAAA,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;AACtB,QAAA,IAAoB,CAAA,oBAAA,GAAW,CAAC,CAAC;AACjC,QAAA,IAAW,CAAA,WAAA,GAAiB,EAAE,CAAC;AAC/B,QAAA,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;AAC3B,QAAA,IAAY,CAAA,YAAA,GAAW,cAAc,CAAC;AACtC,QAAA,IAAY,CAAA,YAAA,GAAyB,SAAS,CAAC;AAC/C,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AAEvB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;AAC7C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AAKhD,QAAA,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;AACb,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACjB,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAC3B,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAC9B,QAAA,IAAW,CAAA,WAAA,GAAW,OAAO,CAAC;QAE9B,IAAA,CAAA,QAAQ,GAAoB;YAC1B,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAG;YAC9D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE;SACrD,CAAC;AAEM,QAAA,IAAyB,CAAA,yBAAA,GAAwB,IAAI,CAAC;AACtD,QAAA,IAAe,CAAA,eAAA,GAAW,CAAC,CAAC,CAAC;KAsJtC;IApJC,eAAe,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAChC,QAAA,IAAI,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE;YACnF,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,YAAY,CAAC;AACjE,YAAA,IAAI,WAAW,KAAK,IAAI,CAAC,eAAe,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA,EAAE;AACvE,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC9B,aAAA;AACF,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,IAAI,CAAC,yBAAyB,EAAE,CAAC;AAClC,SAAA;KACF;AAED,IAAA,UAAU,CAAC,YAAoB,EAAA;;AAC7B,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ;YAAE,OAAO;AAEjF,QAAA,MAAM,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAEzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,QAAA,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;QAEpC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,SAAA;KACF;IAED,UAAU,GAAA;;QACR,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAA;YAAE,OAAO;QAEzC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACxB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACvB,SAAA;KACF;AAED,IAAA,eAAe,CAAC,KAAiB,EAAA;;AAC/B,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,0CAAE,aAAa,CAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAA;YAAE,OAAO;QAE7E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9D,MAAM,iBAAiB,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAC;KACjD;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;AAED,IAAA,MAAM,CAAC,KAAiB,EAAA;;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAA;YAAE,OAAO;QAE/D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,GAAG,CAAC;KAC/B;IAED,QAAQ,GAAA;;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAA;YAAE,OAAO;AAE3D,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;QACtF,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAC;KACjD;IAED,qBAAqB,GAAA;QACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAEO,oBAAoB,GAAA;QAC1B,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;AACvC,SAAA;QAED,UAAU,CAAC,MAAK;;YACd,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,MAAK;AACnB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,gBAAA,IAAI,GAAG,GAAG,UAAU,GAAG,GAAG;oBAAE,OAAO;gBAEnC,UAAU,GAAG,GAAG,CAAC;AACjB,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAE3C,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,oBAAA,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAC5D,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACpD,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtC,iBAAA;AACH,aAAC,CAAC;AAEF,YAAA,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAE9C,YAAA,IAAI,CAAC,yBAAyB,GAAG,MAAK;AACpC,gBAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACnD,aAAC,CAAC;SACH,EAAE,GAAG,CAAC,CAAC;KACT;AAED,IAAA,mBAAmB,CAAC,IAAgB,EAAA;;QAClC,IAAI,EAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAA;AAAE,YAAA,OAAO,CAAC,CAAC;AACrD,QAAA,OAAO,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;KACvF;AAED,IAAA,YAAY,CAAC,IAAgB,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;KAC1D;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;KACxC;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;AAED,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC;QAE/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAEtC,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE,CAAC;KAClF;;+GAlLU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,wkBCjB/B,s2UAwKM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA6B,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAhC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvJO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,s2UAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAMhB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEI,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEe,OAAO,EAAA,CAAA;sBAA5B,SAAS;uBAAC,SAAS,CAAA;gBACM,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;MEvBb,qBAAqB,CAAA;AALlC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAI,CAAA,IAAA,GAAqB,MAAM,CAAC;AAChC,QAAA,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AACrB,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;KAwCjC;AAtCC,IAAA,IAAI,QAAQ,GAAA;QACV,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,eAAe,CAAC;AACzB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,eAAe,CAAC;AACzB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM,CAAC;AAChB,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC;AACjB,SAAA;KACF;AAED,IAAA,IAAI,SAAS,GAAA;QACX,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA;AACE,gBAAA,OAAO,SAAS,CAAC;AACpB,SAAA;KACF;AAED,IAAA,IAAI,aAAa,GAAA;QACf,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA;AACE,gBAAA,OAAO,SAAS,CAAC;AACpB,SAAA;KACF;;kHA1CU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,+HCTlC,iiCA+BA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDtBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,iiCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKpB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;MELK,qBAAqB,CAAA;AALlC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AACrB,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;KACjC;;kHAHY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,kHCPlC,yuEAyBA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDlBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,yuEAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKrB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;MEFK,uBAAuB,CAAA;AALpC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAU,CAAA,UAAA,GAAW,GAAG,CAAC;AACzB,QAAA,IAAW,CAAA,WAAA,GAAW,KAAK,CAAC;AAC5B,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AACvB,QAAA,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;AACrB,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;AACb,QAAA,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;KAqBtC;AAnBC,IAAA,IAAI,WAAW,GAAA;QACb,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE;AACnD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE;AACnD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;KAClD;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,QAAQ,IAAI,CAAC;KAC7B;;oHA3BU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,uNCPpC,0+CA2CA,EAAA,CAAA,CAAA;2FDpCa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,0+CAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKtB,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEFK,uBAAuB,CAAA;AALpC,IAAA,WAAA,GAAA;AAaW,QAAA,IAAI,CAAA,IAAA,GAAa,QAAQ,CAAC;KAwJpC;AArJC,IAAA,IAAI,WAAW,GAAA;QACb,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ,CAAC;AAClB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ,CAAC;AAClB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ,CAAC;AAClB,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,cAAc,CAAC;AACxB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACF;AAED,IAAA,IAAI,WAAW,GAAA;QACb,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA;AACE,gBAAA,OAAO,SAAS,CAAC;AACpB,SAAA;KACF;AAED,IAAA,IAAI,iBAAiB,GAAA;QACnB,QAAQ,IAAI,CAAC,MAAM;AACf,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,SAAS;AACV,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,SAAS;AACV,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,SAAS;AACV,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,cAAc;AACf,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,SAAS;AACV,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA;AACI,gBAAA,OAAO,SAAS,CAAC;AACxB,SAAA;KACF;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,OAAO,CAAC;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,OAAO,CAAC;AACjB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,UAAU,CAAC;AACpB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,MAAM,CAAC;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,iBAAiB,CAAC;AAC3B,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,uBAAuB,CAAC;AACjC,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc,CAAC;AACxB,YAAA;AACE,gBAAA,OAAO,cAAc,CAAC;AACzB,SAAA;KACF;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;KAC1D;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;KAC3D;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;KAC9B;AAED,IAAA,IAAI,yBAAyB,GAAA;QAC3B,OAAO;YACL,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;YAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM;YACvC,QAAQ,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM;AACxC,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,SAAS,EAAE,aAAa;AACxB,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,iBAAiB,EAAE,QAAQ;SAC5B,CAAC;KACH;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM;YACvC,QAAQ,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM;SACzC,CAAC;KACH;AAED,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO;YACL,kBAAkB,EAAE,IAAI,CAAC,WAAW;SACrC,CAAC;KACH;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO;AACL,YAAA,kBAAkB,EAAE,SAAS;YAC7B,SAAS,EAAE,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,SAAS;YAC/C,eAAe,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK;YAC7C,WAAW,EAAG,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,MAAM;YAC3C,aAAa,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM;SAC9C,CAAC;KACH;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;KACvC;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;KACrC;;oHA9JU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,sQCXpC,8kHAkGM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvFO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,8kHAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKvB,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEXK,8BAA8B,CAAA;AAL3C,IAAA,WAAA,GAAA;AAMW,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AACzB,QAAA,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AACxB,QAAA,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;AAC3B,QAAA,IAAK,CAAA,KAAA,GAAW,mBAAmB,CAAC;AACpC,QAAA,IAAQ,CAAA,QAAA,GAAW,0CAA0C,CAAC;AAC9D,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE3C,QAAA,IAAW,CAAA,WAAA,GAAkB,UAAU,CAAC;AACxC,QAAA,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;AACpC,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AACnC,QAAA,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;KAqFvC;AAnFC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACjC,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACnC,SAAA;KACF;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,YAAA,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,YAAA,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;AAED,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AAC3C,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B,CAAC;AAEzD,QAAA,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;YAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;KACF;AAED,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC7C,QAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;KAC5B;IAED,gBAAgB,CAAC,IAA2C,EAAE,KAAY,EAAA;AACxE,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC7C,QAAA,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC3B,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAChC,SAAA;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;aAAM,IAAI,IAAI,KAAK,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAClC,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,IAA2C,EAAA;QAC3D,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACvD,SAAA;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE;YAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrD,SAAA;aAAM,IAAI,IAAI,KAAK,YAAY,EAAE;YAChC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC3D,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,OAAO,CAAC,IAAmB,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IAED,gBAAgB,GAAA;QACd,MAAM,KAAK,GAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrD,QAAA,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;KACzC;IAED,YAAY,GAAA;QACV,MAAM,KAAK,GAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrD,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;KACrC;;2HAhGU,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,+QCT3C,s/RA0IA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDjIa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;+BACE,6BAA6B,EAAA,QAAA,EAAA,s/RAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAK9B,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,KAAK,EAAA,CAAA;sBAAd,MAAM;;;MEDI,0BAA0B,CAAA;AALvC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAI,CAAA,IAAA,GAAwB,EAAE,CAAC;KA+DzC;;AA5DC,IAAA,YAAY,CAAC,KAAgB,EAAA;QAC3B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;KAC9D;;AAGD,IAAA,SAAS,CAAC,KAAgB,EAAA;AACxB,QAAA,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;KACnC;;AAGD,IAAA,eAAe,CAAC,IAAuB,EAAA;QACrC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACjC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAA;AAED,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;AAGD,IAAA,aAAa,CAAC,IAAuB,EAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,QAAQ,KAAK;AACX,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,qCAAqC,CAAC;AAC/C,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,qCAAqC,CAAC;AAC/C,YAAA;AACE,gBAAA,OAAO,qCAAqC,CAAC;AAChD,SAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAuB,EAAA;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,QAAQ,KAAK;AACX,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,mBAAmB,CAAC;AAC7B,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,mBAAmB,CAAC;AAC7B,YAAA;AACE,gBAAA,OAAO,mBAAmB,CAAC;AAC9B,SAAA;KACF;;AAGD,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO;AACL,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,QAAQ,EAAE,MAAM;SACjB,CAAC;KACH;;uHAjEU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,sHCfvC,ogFAsDM,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvCO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,ogFAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKzB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;ME+EK,oBAAoB,CAAA;IA+B/B,WACU,CAAA,EAAe,EACf,GAAsB,EAAA;AADtB,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;AACf,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAhCvB,QAAA,IAAI,CAAA,IAAA,GAAyB,EAAE,CAAC;AAEhC,QAAA,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;AAC/B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB,CAAC;AAC/C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkB,CAAC;AAS3D,QAAA,IAAe,CAAA,eAAA,GAAqB,EAAE,CAAC;AACvC,QAAA,IAAY,CAAA,YAAA,GAAyB,EAAE,CAAC;AAExC,QAAA,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QAEtB,IAAA,CAAA,gBAAgB,GAAqB;AACnC,YAAA,KAAK,EAAE,oBAAoB;AAC3B,YAAA,WAAW,EAAE,8EAA8E;YAC3F,QAAQ,EAAE,kBAAkB,CAAC,YAAY;AACzC,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;AAwCM,QAAA,IAAe,CAAA,eAAA,GAAU,EAAE,CAAC;AAC5B,QAAA,IAAQ,CAAA,QAAA,GAAyB,EAAE,CAAC;AA8CpC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;KAlF7C;IAEL,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;YACnD,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC7B,SAAA;AAED,QAAA,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;YAC5B,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACzB,SAAA;KACF;IAEO,cAAc,GAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,IAAI,EAAE,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,CAAC,IAAI,CAAC;AACb,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;YACpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACJ;IAKO,kBAAkB,GAAA;;AACxB,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC7C,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;gBAC3C,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,KAAK,EAAE,GAAG,CAAC,EAAE;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC/B,gBAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC/B,aAAA,CAAC,CAAC,CAAC;AACJ,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3B,SAAA;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AAC1E,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAE1E,IAAI,CAAC,gBAAgB,GAAG;AACtB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,WAAW,EAAE,uBAAuB;AACpC,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,SAAS,EAAE,IAAI,CAAC,aAAa;AAC7B,YAAA,QAAQ,EAAE,CAAC,KAAa,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC;AACjE,YAAA,UAAU,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC;SACrE,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG;AACtB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,WAAW,EAAE,uBAAuB;AACpC,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,SAAS,EAAE,IAAI,CAAC,aAAa;AAC7B,YAAA,QAAQ,EAAE,CAAC,KAAa,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC;AACjE,YAAA,UAAU,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC;SACrE,CAAC;KACH;AAIO,IAAA,cAAc,CAAC,GAAuB,EAAA;QAC5C,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;AACxC,SAAA;QAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACjD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,CAAQ,KAAA,EAAA,GAAG,CAAC,EAAE,CAAA,GAAA,EAAM,aAAa,CAAA,CAAE,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACtC,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,0BAA0B,GAAA;QAChC,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,IAAI,CAAC,gBAAgB,KACxB,SAAS,EAAE,IAAI,CAAC,aAAa,EAC7B,OAAO,EAAE,IAAI,CAAC,WAAW,GAC1B,CAAC;AACH,SAAA;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,IAAI,CAAC,gBAAgB,KACxB,SAAS,EAAE,IAAI,CAAC,aAAa,EAC7B,OAAO,EAAE,IAAI,CAAC,WAAW,GAC1B,CAAC;AACH,SAAA;KACF;IAED,gBAAgB,CAAC,KAAa,EAAE,GAAW,EAAA;QACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;KACtC;AAED,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;AAED,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,UAAU,CAAC,KAAqC,EAAA;QAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACrC;IAEO,kBAAkB,GAAA;;AACxB,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAE5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AAElD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AACnE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAEnE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAEO,IAAA,gBAAgB,CAAC,IAAwB,EAAA;;QAC/C,MAAM,MAAM,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU;aACrD,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,0CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAA;AACnD,YAAA,gBAAgB,CAAC;AAChC,QAAA,MAAM,OAAO,GAAG,CAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,KAAI,iBAAiB,CAAC;AACxF,QAAA,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,kBAAkB,CAAC;QAE3F,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,MAAM;YACN,OAAO;YACP,QAAQ;YACR,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;KACH;IAEO,iBAAiB,GAAA;QACvB,IAAI,CAAC,YAAY,GAAG;AAClB,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE,CAAC,GAAmB,KAAI;oBAC9B,OAAO,CAAA;;AAE4C,2DAAA,EAAA,GAAG,CAAC,SAAS,CAAA;;WAE/D,CAAC;iBACH;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,MAAM,EAAE,CAAC,GAAmB,KAAI;AAC9B,oBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AACnB,wBAAA,OAAO,uDAAuD,CAAC;AAChE,qBAAA;oBACD,OAAO,CAAA;;AAED,cAAA,EAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;iEACY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;;WAEhG,CAAC;iBACH;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,MAAM,EAAE,CAAC,GAAmB,KAAI;AAC9B,oBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AACnB,wBAAA,OAAO,yDAAyD,CAAC;AAClE,qBAAA;oBACD,OAAO,CAAA;;AAED,cAAA,EAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;iEACY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;;WAEhG,CAAC;iBACH;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,MAAM,EAAE,CAAC,GAAmB,KAAI;AAC9B,oBAAA,MAAM,YAAY,GAA2B;AAC3C,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,gBAAgB,EAAE,gBAAgB;AAClC,wBAAA,gBAAgB,EAAE,gBAAgB;AAClC,wBAAA,OAAO,EAAE,OAAO;AAChB,wBAAA,SAAS,EAAE,SAAS;qBACrB,CAAC;AACF,oBAAA,MAAM,YAAY,GAA2B;AAC3C,wBAAA,WAAW,EAAE,SAAS;AACtB,wBAAA,gBAAgB,EAAE,SAAS;AAC3B,wBAAA,gBAAgB,EAAE,SAAS;AAC3B,wBAAA,OAAO,EAAE,SAAS;AAClB,wBAAA,SAAS,EAAE,SAAS;qBACrB,CAAC;AACF,oBAAA,MAAM,cAAc,GAA2B;AAC7C,wBAAA,WAAW,EAAE,SAAS;AACtB,wBAAA,gBAAgB,EAAE,SAAS;AAC3B,wBAAA,gBAAgB,EAAE,SAAS;AAC3B,wBAAA,OAAO,EAAE,SAAS;AAClB,wBAAA,SAAS,EAAE,SAAS;qBACrB,CAAC;AAEF,oBAAA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC;oBACrD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;oBACpD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;oBAExD,OAAO,CAAA;;AAE4B,2CAAA,EAAA,OAAO,YAAY,KAAK,CAAA;gBACrD,KAAK,CAAA;;WAEV,CAAC;iBACH;AACF,aAAA;SACF,CAAC;KACH;AAEO,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,CAAA;;;;aAIA,CAAC;AACT,SAAA;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE;YACpC,OAAO,CAAA;;;;;aAKA,CAAC;AACT,SAAA;aAAM,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,cAAc,EAAE;YACnG,OAAO,CAAA;;;;aAIA,CAAC;AACT,SAAA;aAAM,IAAI,WAAW,KAAK,QAAQ,EAAE;YACnC,OAAO,CAAA;;;;;;;;;;aAUA,CAAC;AACT,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,yDAAyD,CAAC;AAClE,SAAA;KACF;AAEO,IAAA,cAAc,CAAC,YAAoB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC;QACpC,IAAI,OAAO,GAAG,EAAE,EAAE;YAChB,OAAO,CAAA,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACjC,SAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AAClD,QAAA,OAAO,CAAG,EAAA,OAAO,CAAK,EAAA,EAAA,gBAAgB,GAAG,CAAC;KAC3C;IAEO,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,YAAY,CAAC,KAA8C,EAAA;AACzD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;KAC3F;IAED,cAAc,GAAA;;AACZ,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;QAE5C,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,MAAM;gBACN,MAAM;AACP,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,IAAI,UAAU,GAAA;;AACZ,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAC5C,QAAA,OAAO,CAAC,EAAE,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KACtD;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAC;AACzC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KACtD;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAC;AACzC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KACtD;AAED,IAAA,IAAI,qBAAqB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAC;AACzC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KACtD;AAED,IAAA,IAAI,qBAAqB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAC;AACzC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KACtD;AAED,IAAA,IAAI,iBAAiB,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAC;AACzC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KACtD;AAED,IAAA,IAAI,iBAAiB,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAC;AACzC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KACtD;AAED,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAClC,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,oBAAoB,CAAC,YAAoB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;KAC1C;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC1D;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;AAClC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;AACF,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;KACrE;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,EAAE,CAAC;AAClC,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,SAAS,EAAE,SAAS;SACrB,CAAC;AACF,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;KACrE;;iHAxfU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,0UCjGjC,yiaAsMA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAO,2BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAQ,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAZ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA2B,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAApB,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDrGa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yiaAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;oIAGtC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEjFI,uBAAuB,CAAA;AALpC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAU,CAAA,UAAA,GAAoB,EAAE,CAAC;AAEjC,QAAA,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;AAE7C,QAAA,IAAY,CAAA,YAAA,GAAyB,EAAE,CAAC;AACxC,QAAA,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QAErB,IAAA,CAAA,gBAAgB,GAAqB;AACnC,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,kBAAkB,CAAC,SAAS;AACtC,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;KAqJH;IAnJC,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACpB,SAAA;KACF;IAEO,iBAAiB,GAAA;QACvB,IAAI,CAAC,YAAY,GAAG;AAClB,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,MAAM,EAAE,CAAC,GAAkB,KAAI;AAC7B,oBAAA,OAAO,CAAqE,kEAAA,EAAA,GAAG,CAAC,KAAK,SAAS,CAAC;iBAChG;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,SAAS,EAAE,YAAY;AACvB,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,MAAM,EAAE,CAAC,GAAkB,KAAI;AAC7B,oBAAA,OAAO,CAAiE,8DAAA,EAAA,GAAG,CAAC,SAAS,SAAS,CAAC;iBAChG;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE,CAAC,GAAkB,KAAI;AAC7B,oBAAA,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAC5D,oBAAA,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAI;AAChE,wBAAA,OAAO,CAAqD,kDAAA,EAAA,KAAK,KAAK,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,UAAU,CAAA;6GACzB,GAAG,CAAA;6EACnC,KAAK,CAAA;mBAC/D,CAAC;AACV,qBAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACZ,OAAO,CAAA,mCAAA,EAAsC,aAAa,CAAA,MAAA,CAAQ,CAAC;iBACpE;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE,CAAC,GAAkB,KAAI;oBAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBAC1C;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,SAAS,EAAE,UAAU;AACrB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE,CAAC,GAAkB,KAAI;oBAC7B,OAAO,CAAA;;;;;;AAM4C,2DAAA,EAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;;WAEnF,CAAC;iBACH;AACF,aAAA;SACF,CAAC;KACH;AAEO,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,WAAW,KAAK,MAAM,EAAE;YAC1B,OAAO,CAAA;;;;;;;;OAQN,CAAC;AACH,SAAA;aAAM,IAAI,WAAW,KAAK,MAAM,EAAE;YACjC,OAAO,CAAA;;;;;;;;OAQN,CAAC;AACH,SAAA;aAAM,IAAI,WAAW,KAAK,aAAa,EAAE;YACxC,OAAO,CAAA;;;;;;;OAON,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,2GAA2G,CAAC;AACpH,SAAA;KACF;AAEO,IAAA,cAAc,CAAC,YAAoB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC;QACpC,IAAI,OAAO,GAAG,EAAE,EAAE;YAChB,OAAO,CAAA,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACjC,SAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AAClD,QAAA,OAAO,CAAG,EAAA,OAAO,CAAK,EAAA,EAAA,gBAAgB,GAAG,CAAC;KAC3C;AAED,IAAA,YAAY,CAAC,KAA8C,EAAA;AACzD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;KAChC;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;KACzD;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC;AACrB,SAAA;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QAEvE,OAAO;AACL,YAAA,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YACvC,MAAM;YACN,MAAM;SACP,CAAC;KACH;;oHAlKU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,oLCzBpC,s8DA0CA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAqB,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAjC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDjBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,s8DAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKtB,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;;;MELK,uBAAuB,CAAA;AAGlC,IAAA,IAAI,WAAW,GAAA;;AACb,QAAA,IAAI,MAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,EAAE;AAClC,YAAA,OAAO,CAAkB,eAAA,EAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAK,EAAA,EAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;AACpG,SAAA;QACD,OAAO,CAAA,eAAA,EAAkB,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,iBAAiB,KAAI,EAAE,CAAA,CAAE,CAAC;KACzE;AAED,IAAA,IAAI,SAAS,GAAA;;AACX,QAAA,OAAO,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,0CAAE,YAAY,MAAI,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,IAAI,mBAAmB,CAAC;KAChG;AAED,IAAA,IAAI,cAAc,GAAA;;QAChB,OAAO,CAAA,MAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,KAAI,OAAO,CAAC;KAClD;AAED,IAAA,IAAI,YAAY,GAAA;;QACd,OAAO,CAAA,MAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,KAAI,IAAI,CAAC;KAC9C;AAED,IAAA,IAAI,cAAc,GAAA;;QAChB,OAAO,CAAA,MAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAe,KAAI,EAAE,CAAC;KACnD;AAED,IAAA,IAAI,YAAY,GAAA;;QACd,OAAO,CAAA,MAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,KAAI,EAAE,CAAC;KACjD;AAED,IAAA,IAAI,WAAW,GAAA;;QACb,OAAO,CAAA,MAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,KAAI,EAAE,CAAC;KAC/C;AAED,IAAA,IAAI,cAAc,GAAA;;QAChB,OAAO,CAAC,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAA,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;KAChG;IAED,uBAAuB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACtE;;oHAzCU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,0GCvBpC,2gEAmCA,EAAA,CAAA,CAAA;2FDZa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,2gEAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKvB,cAAc,EAAA,CAAA;sBAAtB,KAAK;;;MEbK,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AAEX,QAAA,IAAI,CAAA,IAAA,GAAc,MAAM,CAAC;AAEzB,QAAA,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AAEjB,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AAEX,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAM,CAAA,MAAA,GAAa,EAAE,CAAC;AAEtB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AAEf,QAAA,IAAI,CAAA,IAAA,GAAc,IAAI,CAAC;AAEvB,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAIlB,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAMrB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AAEzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAc,CAAC;AAEzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAc,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAEpD,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAChB,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;KAqFnB;AAnFC,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE;YACnE,IAAI,QAAQ,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;YAEnD,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;gBACtD,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAClD,aAAA;AAED,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,UAAU,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC5B,aAAA;AACF,SAAA;KACF;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;KAC9C;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,+BAA+B,CAAC;AACzC,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,iCAAiC,CAAC;AAC3C,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,iCAAiC,CAAC;AAC3C,YAAA;AACE,gBAAA,OAAO,iCAAiC,CAAC;AAC5C,SAAA;KACF;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,sBAAsB,CAAC;AAChC,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,wBAAwB,CAAC;AAClC,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,wBAAwB,CAAC;AAClC,YAAA;AACE,gBAAA,OAAO,wBAAwB,CAAC;AACnC,SAAA;KACF;AAED,IAAA,OAAO,CAAC,KAAY,EAAA;;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC,CAAC;AACvD,QAAA,IAAI,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7E,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACnD,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACxC;AAED,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;AAED,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;AAED,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAChD,SAAA;KACF;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;KACpC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;KACpC;;iHA3HU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,2jBCXjC,43FA8DA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDnDa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAGtB,IAAA,EAAA,EAAE,KAAK,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,43FAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAIrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MExCI,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;AAMW,QAAA,IAAe,CAAA,eAAA,GAAa,EAAE,CAAC;KACzC;;iHAFY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,wGCPjC,6zGA4BA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDrBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,6zGAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAKnB,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEWK,6BAA6B,CAAA;AAL1C,IAAA,WAAA,GAAA;AAMW,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AACxB,QAAA,IAAM,CAAA,MAAA,GAAoB,QAAQ,CAAC;AACnC,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AACnB,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AACvB,QAAA,IAAc,CAAA,cAAA,GAAW,CAAC,CAAC;AAC3B,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AACvB,QAAA,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AACrB,QAAA,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;AAEtB,QAAA,IAAO,CAAA,OAAA,GAA4B,EAAE,CAAC;AAErC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;KAgDhD;AA9CA,IAAA,IAAI,oBAAoB,GAAA;QACtB,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,oBAAoB,CAAC;AAC9B,YAAA;AACE,gBAAA,OAAO,iBAAiB,CAAC;AAC5B,SAAA;KACF;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,SAAS,CAAC;AACnB,YAAA;AACE,gBAAA,OAAO,SAAS,CAAC;AACpB,SAAA;KACF;AAED,IAAA,IAAI,2BAA2B,GAAA;QAC7B,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAC9D;AAED,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AAC3C,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B,CAAC;AAEzD,QAAA,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;YAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;KACF;AAED,IAAA,aAAa,CAAC,MAA6B,EAAA;QACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACtC;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;;0HA5DU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,6BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,+XCnB1C,6tLAgGA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD7Ea,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,6tLAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA;8BAK7B,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;MEkNI,WAAW,CAAA;AACtB,IAAA,WAAA,CAAY,YAA6B,EAAA;AACvC,QAAA,YAAY,CAAC,sBAAsB,CAAC,2BAA2B,EAAE,2BAA2B,CAAC,CAAC;KAC/F;;wGAHU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,iBA/JpB,eAAe;QACf,kBAAkB;QAClB,uBAAuB;QACvB,eAAe;QACf,qBAAqB;QACrB,4BAA4B;QAC5B,8BAA8B;QAC9B,6BAA6B;QAC7B,mBAAmB;QACnB,yBAAyB;QACzB,oBAAoB;QACpB,sBAAsB;QACtB,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,2BAA2B;QAC3B,oBAAoB;QACpB,qBAAqB;QACrB,kBAAkB;QAClB,yBAAyB;QACzB,wBAAwB;QACxB,2BAA2B;QAC3B,6BAA6B;QAC7B,4BAA4B;QAC5B,2BAA2B;QAC3B,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;QACd,uBAAuB;QACvB,yBAAyB;QACzB,mBAAmB;QACnB,sBAAsB;QACtB,wBAAwB;QACxB,wBAAwB;QACxB,kBAAkB;QAClB,qBAAqB;QACrB,kBAAkB;QAClB,iBAAiB;QACjB,sBAAsB;QACtB,mBAAmB;QACnB,yBAAyB;QACzB,oBAAoB;QACpB,gBAAgB;QAChB,yBAAyB;QACzB,iCAAiC;QACjC,yBAAyB;QACzB,yBAAyB;QACzB,kBAAkB;QAClB,qBAAqB;QACrB,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB;QACvB,8BAA8B;QAC9B,0BAA0B;QAC1B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,oBAAoB;QACpB,oBAAoB;AACpB,QAAA,6BAA6B,aAG7B,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,aAAa;QACb,aAAa;QACb,eAAe;QACf,kBAAkB;QAClB,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,cAAc;QACd,mBAAmB;QACnB,mBAAmB;QACnB,wBAAwB;QACxB,gBAAgB;QAChB,aAAa;AACb,QAAA,YAAY,aAGZ,eAAe;QACf,kBAAkB;QAClB,uBAAuB;QACvB,eAAe;QACf,qBAAqB;QACrB,4BAA4B;QAC5B,8BAA8B;QAC9B,6BAA6B;QAC7B,mBAAmB;QACnB,yBAAyB;QACzB,oBAAoB;QACpB,sBAAsB;QACtB,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,2BAA2B;QAC3B,oBAAoB;QACpB,kBAAkB;QAClB,yBAAyB;QACzB,wBAAwB;QACxB,2BAA2B;QAC3B,6BAA6B;QAC7B,4BAA4B;QAC5B,2BAA2B;QAC3B,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;QACd,uBAAuB;QACvB,yBAAyB;QACzB,mBAAmB;QACnB,sBAAsB;QACtB,wBAAwB;QACxB,wBAAwB;QACxB,kBAAkB;QAClB,qBAAqB;QACrB,kBAAkB;QAClB,iBAAiB;QACjB,sBAAsB;QACtB,mBAAmB;QACnB,yBAAyB;QACzB,oBAAoB;QACpB,gBAAgB;QAChB,yBAAyB;QACzB,iCAAiC;QACjC,yBAAyB;QACzB,yBAAyB;QACzB,kBAAkB;QAClB,qBAAqB;QACrB,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB;QACvB,8BAA8B;QAC9B,0BAA0B;QAC1B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,oBAAoB;QACpB,oBAAoB;QACpB,6BAA6B,CAAA,EAAA,CAAA,CAAA;AAoBpB,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAlBX,SAAA,EAAA;AACT,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;AACjE,QAAA;AACE,YAAA,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,IAAI,GAAG,CAAoB;gBACnC,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAC7B,CAAC,YAAY,EAAE,kBAAkB,CAAC;gBAClC,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAC3B,CAAC,WAAW,EAAE,sBAAsB,CAAC;gBACrC,CAAC,QAAQ,EAAE,mBAAmB,CAAC;gBAC/B,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBAClC,CAAC,KAAK,EAAE,gBAAgB,CAAC;gBACzB,CAAC,eAAe,EAAE,yBAAyB,CAAC;gBAC5C,CAAC,uBAAuB,EAAE,iCAAiC,CAAC;aAC7D,CAAC;AACH,SAAA;KACF,EAhGQ,OAAA,EAAA,CAAA;YACP,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,eAAe;YACf,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,iBAAiB;YACjB,cAAc;YACd,mBAAmB;YACnB,mBAAmB;YACnB,wBAAwB;YACxB,gBAAgB;YAChB,aAAa;YACb,YAAY;SACb,CAAA,EAAA,CAAA,CAAA;2FAgFU,WAAW,EAAA,UAAA,EAAA,CAAA;kBAjKvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,eAAe;wBACf,kBAAkB;wBAClB,uBAAuB;wBACvB,eAAe;wBACf,qBAAqB;wBACrB,4BAA4B;wBAC5B,8BAA8B;wBAC9B,6BAA6B;wBAC7B,mBAAmB;wBACnB,yBAAyB;wBACzB,oBAAoB;wBACpB,sBAAsB;wBACtB,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,2BAA2B;wBAC3B,oBAAoB;wBACpB,qBAAqB;wBACrB,kBAAkB;wBAClB,yBAAyB;wBACzB,wBAAwB;wBACxB,2BAA2B;wBAC3B,6BAA6B;wBAC7B,4BAA4B;wBAC5B,2BAA2B;wBAC3B,wBAAwB;wBACxB,oBAAoB;wBACpB,cAAc;wBACd,uBAAuB;wBACvB,yBAAyB;wBACzB,mBAAmB;wBACnB,sBAAsB;wBACtB,wBAAwB;wBACxB,wBAAwB;wBACxB,kBAAkB;wBAClB,qBAAqB;wBACrB,kBAAkB;wBAClB,iBAAiB;wBACjB,sBAAsB;wBACtB,mBAAmB;wBACnB,yBAAyB;wBACzB,oBAAoB;wBACpB,gBAAgB;wBAChB,yBAAyB;wBACzB,iCAAiC;wBACjC,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,qBAAqB;wBACrB,qBAAqB;wBACrB,uBAAuB;wBACvB,uBAAuB;wBACvB,8BAA8B;wBAC9B,0BAA0B;wBAC1B,oBAAoB;wBACpB,uBAAuB;wBACvB,uBAAuB;wBACvB,oBAAoB;wBACpB,oBAAoB;wBACpB,6BAA6B;AAC9B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,cAAc;wBACd,mBAAmB;wBACnB,mBAAmB;wBACnB,wBAAwB;wBACxB,gBAAgB;wBAChB,aAAa;wBACb,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,eAAe;wBACf,kBAAkB;wBAClB,uBAAuB;wBACvB,eAAe;wBACf,qBAAqB;wBACrB,4BAA4B;wBAC5B,8BAA8B;wBAC9B,6BAA6B;wBAC7B,mBAAmB;wBACnB,yBAAyB;wBACzB,oBAAoB;wBACpB,sBAAsB;wBACtB,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,2BAA2B;wBAC3B,oBAAoB;wBACpB,kBAAkB;wBAClB,yBAAyB;wBACzB,wBAAwB;wBACxB,2BAA2B;wBAC3B,6BAA6B;wBAC7B,4BAA4B;wBAC5B,2BAA2B;wBAC3B,wBAAwB;wBACxB,oBAAoB;wBACpB,cAAc;wBACd,uBAAuB;wBACvB,yBAAyB;wBACzB,mBAAmB;wBACnB,sBAAsB;wBACtB,wBAAwB;wBACxB,wBAAwB;wBACxB,kBAAkB;wBAClB,qBAAqB;wBACrB,kBAAkB;wBAClB,iBAAiB;wBACjB,sBAAsB;wBACtB,mBAAmB;wBACnB,yBAAyB;wBACzB,oBAAoB;wBACpB,gBAAgB;wBAChB,yBAAyB;wBACzB,iCAAiC;wBACjC,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,qBAAqB;wBACrB,qBAAqB;wBACrB,uBAAuB;wBACvB,uBAAuB;wBACvB,8BAA8B;wBAC9B,0BAA0B;wBAC1B,oBAAoB;wBACpB,uBAAuB;wBACvB,uBAAuB;wBACvB,oBAAoB;wBACpB,oBAAoB;wBACpB,6BAA6B;AAC9B,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;AACjE,wBAAA;AACE,4BAAA,OAAO,EAAE,kBAAkB;4BAC3B,QAAQ,EAAE,IAAI,GAAG,CAAoB;gCACnC,CAAC,OAAO,EAAE,kBAAkB,CAAC;gCAC7B,CAAC,YAAY,EAAE,kBAAkB,CAAC;gCAClC,CAAC,MAAM,EAAE,iBAAiB,CAAC;gCAC3B,CAAC,WAAW,EAAE,sBAAsB,CAAC;gCACrC,CAAC,QAAQ,EAAE,mBAAmB,CAAC;gCAC/B,CAAC,UAAU,EAAE,oBAAoB,CAAC;gCAClC,CAAC,KAAK,EAAE,gBAAgB,CAAC;gCACzB,CAAC,eAAe,EAAE,yBAAyB,CAAC;gCAC5C,CAAC,uBAAuB,EAAE,iCAAiC,CAAC;6BAC7D,CAAC;AACH,yBAAA;AACF,qBAAA;iBACF,CAAA;;;MC9OY,SAAS,CAAA;AAKpB,IAAA,WAAA,CAA6B,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAJlC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAuB,CAAC;AACtD,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAIvB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,KAAK,CAAC,MAAgB,EAAA;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC3B;IAED,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAED,IAAA,oBAAoB,CAAC,QAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;KACnC;IAED,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAA2C,CAAC;KACzD;AAEO,IAAA,WAAW,CAAC,MAA2B,EAAA;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KACzB;AACF;;MCzCY,UAAU,GAAG,IAAI,cAAc,CAAiB,gBAAgB,EAAE;MAClE,WAAW,GAAG,IAAI,cAAc,CAAM,iBAAiB;;MCQvD,aAAa,CAAA;IACxB,WAA6B,CAAA,OAAgB,EAAmB,QAAkB,EAAA;AAArD,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAAmB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;KAAI;AAEtF,IAAA,IAAI,CACF,MAAuC,EAAA;;AAEvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE/B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,QAAA,MAAM,SAAS,GAAG,IAAI,SAAS,CAAU,UAAU,CAAC,CAAC;AAErD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;gBAC5C,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;AAChD,aAAA;AACF,SAAA,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClF,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACxD,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,QAAoC,CAAC;AAE5E,QAAA,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,QAAA,iBAAiB,CAAC,SAAS,GAAG,SAAS,CAAC;QAExC,IAAI,CAAA,MAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,UAAU,EAAE;AACvC,YAAA,iBAAiB,CAAC,cAAc,CAC9B,MAAM,CAAC,OAAO,CAAC,QAAQ,EACvB,MAAA,MAAM,CAAC,OAAO,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA;gBACxB,SAAS,EAAE,MAAM,CAAC,IAAI;gBACtB,IAAI,EAAE,MAAM,CAAC,IAAI;AAClB,aAAA,CACF,CAAC;AACH,SAAA;QAED,IAAI,CAAA,MAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,WAAW,EAAE;AACxC,YAAA,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,MAAM,CAAC,OAAO,CAAC,SAAS,EACxB,SAAS,EACT,QAAQ,CAAC,MAAM,CAAC;AACd,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,SAAS,EAAE;AACT,oBAAA,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;oBAC5C,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;AAChD,iBAAA;AACF,aAAA,CAAC,CACH,CAAC;YAEF,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AAExE,YAAA,IAAI,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACzC,gBAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC5D,oBAAA,YAAY,CAAC,QAAoC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClE,iBAAC,CAAC,CAAC;AACH,gBAAA,YAAY,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC/C,aAAA;AAED,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACvD,aAAA;AACF,SAAA;AAED,QAAA,YAAY,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAE9C,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACxB,YAAA,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,UAAU;AACP,iBAAA,aAAa,EAAE;AACf,iBAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAA4B;gBACvC,OAAQ,KAAuB,CAAC,GAAG,KAAK,QAAQ,IAAK,KAAuB,CAAC,GAAG,KAAK,KAAK,CAAC;AAC7F,aAAC,CAAC,CACH;iBACA,SAAS,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;AACvC,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;AAEO,IAAA,iBAAiB,CACvB,MAAuC,EAAA;AAEvC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC9C,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AACzE,SAAA;KACF;AAEO,IAAA,kBAAkB,CACxB,MAAuC,EAAA;;QAEvC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;cAC/C,MAAM,CAAC,UAAU;cACjB,MAAM,CAAC,UAAU;AACnB,kBAAE,CAAC,MAAM,CAAC,UAAU,CAAC;kBACnB,EAAE,CAAC;QAEP,OAAO,IAAI,aAAa,CAAC;AACvB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,CAAC,2BAA2B,EAAE,qBAAqB,CAAC;YACnE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACrD,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,EAAE;YAC1F,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,mCAAI,MAAM;AACnC,YAAA,UAAU,EAAE,CAAC,kBAAkB,EAAE,GAAG,UAAU,CAAC;AAChD,SAAA,CAAC,CAAC;KACJ;;0GA9GU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;ACXD;;AAEG;;;;"}