import { EventEmitter, OnInit, ElementRef, AfterViewInit, OnDestroy } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import * as i0 from "@angular/core"; export interface TextareaQueryConfig { fields: TextareaQueryField[]; operators: TextareaQueryOperator[]; defaultCondition?: 'and' | 'or'; } export interface TextareaQueryField { key: string; label: string; type: string; description?: string; unit?: string; options?: { label: string; value: any; }[]; operators?: string[]; } export interface TextareaQueryOperator { value: string; label: string; description?: string; types?: string[]; } export interface TextareaQueryGroup { condition: 'and' | 'or'; rules: (TextareaQueryRule | TextareaQueryGroup)[]; } export interface TextareaQueryRule { field: string; operator: string; value: any; condition?: 'and' | 'or'; } export interface SuggestionItem { id: string; name: string; label: string; description?: string; unit?: string; value: string; type: 'field' | 'operator' | 'value' | 'condition'; } export interface DropdownPosition { top: number; left: number; } export declare class QueryBuilderTextareaComponent implements OnInit, AfterViewInit, OnDestroy { private fb; config: TextareaQueryConfig; queryChange: EventEmitter; suggestionSelected: EventEmitter; queryTextarea: ElementRef; dropdown: ElementRef; form: FormGroup; suggestions: SuggestionItem[]; filteredSuggestions: SuggestionItem[]; isDropdownVisible: boolean; selectedIndex: number; dropdownPosition: DropdownPosition; selectedSuggestion: SuggestionItem | null; isDatePickerVisible: boolean; datePickerPosition: DropdownPosition; currentDateField: string | null; currentDateOperator: string | null; showDualDatePicker: boolean; firstDateSelected: Date | null; secondDateSelected: Date | null; private destroy$; private searchSubject; private cursorPosition; private currentContext; private lastSelectedField; private readonly DEBOUNCE_DELAY; private readonly MAX_SUGGESTIONS; constructor(fb: FormBuilder); onDocumentClick(event: Event): void; ngOnInit(): void; ngAfterViewInit(): void; ngOnDestroy(): void; private setupSearchStream; private setupTextareaEvents; private initSuggestions; private updateCursorPosition; /** * Gets text up to the cursor position */ getTillCursor(): string; /** * Gets the last word before cursor position */ getLastWordBeforeCursor(): string; /** * Inserts text at the position of the current word */ insertWord(text: string, appendOnly?: boolean): void; private insertSuggestion; onApply(): void; onReset(): void; private onTextareaInput; private onTextareaBlur; private updateContext; private filterSuggestionsByContext; private getContextSuggestions; private getOperatorSuggestions; private getValueSuggestions; private calculateRelevanceScore; private parseQuery; private parseAndEmitQuery; private onKeyDown; private getCurrentWord; private getCurrentWordBounds; private getPreviousTokens; private isAfterOperator; private isAfterField; private isAfterValue; private getLastField; onSuggestionClick(suggestion: SuggestionItem): void; private selectSuggestion; onOptionSelected(event: any): void; private searchSuggestions; private hideDropdown; private showOperatorSuggestions; private showValueSuggestions; private updateDropdownPosition; private showDatePicker; private updateDatePickerPosition; private getCurrentOperator; onFirstDateSelected(date: Date): void; onSecondDateSelected(date: Date): void; private insertDateValue; private insertDateRangeValue; private formatDate; private insertTextAtCursor; hideDatePicker(): void; private getCursorCoordinates; private scrollToSelected; private parseRule; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }