import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { FormBuilder, FormGroup, FormControl } from '@angular/forms'; import { DynamicSelectFieldConfig } from '../../../dynamic-select/dynamic-select-field.component'; import { ElementCreatePayload, ElementUpdatePayload, ScreenNameOption } from '../element-popup-form-data'; import { ElementPopupDataElements } from '../element-popup-data'; import * as i0 from "@angular/core"; export declare class ElementFormComponent implements OnInit, OnChanges { private readonly cdr?; /** Element ID when editing existing element */ elementId?: number; /** Current element data (for edit mode) */ element: ElementPopupDataElements; /** Screen name options for autocomplete (from API) */ screenNameOptions: ScreenNameOption[]; /** Elements (for the Label dropdown when a screen is selected) */ elements: ElementPopupDataElements[]; /** Whether more screen names are available for infinite scroll */ hasMoreScreenNames: boolean; /** True while parent is loading screen names (search or load more) */ isLoadingScreenNames: boolean; /** Whether more elements are available for infinite scroll */ hasMoreElements: boolean; /** True while parent is loading elements (search or load more) */ isLoadingElements: boolean; /** True while parent is fetching latest element data for edit (shows loading state) */ isElementLoading: boolean; /** Whether we're in edit mode */ isEditMode: boolean; /** Whether we're in create mode */ isCreateMode: boolean; /** Whether edit in depth is available */ isEditInDepthAvailable: boolean; /** Emitted when user creates a new element (parent should call API) */ createElement: EventEmitter; /** Emitted when user updates an element (parent should call API) */ updateElement: EventEmitter; /** Emitted when user requests to create a new screen name */ createScreenNameRequest: EventEmitter; /** Emitted when user searches screen names (server search) */ searchScreenName: EventEmitter; /** Emitted when user scrolls to load more screen names (passes current search query) */ loadMoreScreenNames: EventEmitter; /** Emitted when user searches elements (server search) */ searchElements: EventEmitter; /** Emitted when user scrolls to load more elements */ loadMoreElements: EventEmitter; /** Emitted when user selects a screen so parent can fetch elements filtered by that screen */ searchElementsByScreenName: EventEmitter<{ screenNameId: number; searchTerm?: string; }>; /** Emitted when user clicks "Select from Element list" or "Cancel" */ cancel: EventEmitter; /** Emitted when user clicks "Edit in depth" */ editInDepth: EventEmitter; form: FormGroup; /** Labels (tags) as string array for multi-tag input */ formLabels: string[]; /** Current tag input value */ tagInputValue: string; /** Config for screen name dynamic-select (server search, allowCustomValue, infinite scroll) */ screenNameSelectConfig: DynamicSelectFieldConfig; /** Config for the Label dynamic-select (shown when a real screen is selected) */ elementSelectConfig: DynamicSelectFieldConfig; /** True when the user just created a brand-new screen name in this session (no elements exist yet for it). */ isNewScreenNameSelected: boolean; /** Whether we're saving (disable buttons) */ saving: boolean; private fb; constructor(fb?: FormBuilder, cdr?: ChangeDetectorRef); ngOnChanges(changes: SimpleChanges): void; ngOnInit(): void; private initializeForm; /** True when a real (non-None) screen is selected */ hasSelectedScreenName(): boolean; private updateElementSelectConfig; private updateScreenNameSelectConfig; private populateFormForEdit; private populateFormForCreateWithElement; /** Called by parent when a new screen name was created (so we can set the selected value) */ setCreatedScreenName(opt: { id: number; name: string; }): void; onApply(): void; onCreateOrUpdateSuccess(): void; onCreateOrUpdateError(): void; onCancel(): void; onEditInDepth(event: Event): void; getFormControl(controlName: string): FormControl; getFormControlValue(controlName: string): string; onFormControlChange(controlName: string, value: string): void; /** Add a tag (label) */ addTag(tag?: string): void; removeTag(tag: string): void; onTagInputKeydown(event: KeyboardEvent): void; /** Tags to render as chips (limited) */ get visibleTags(): string[]; /** Tooltip text showing all tags */ get allTagsTooltip(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }