import { EventEmitter } from '../../stencil-public-runtime';
import { OptionsSetFocus } from './interfaces/optionsSetFocus';
export declare class EzTagInput {
  _element: HTMLElement;
  private _inputElement?;
  private _keyboardManager;
  /** Texto do label exibido acima do input */
  label: string;
  /** Placeholder do input */
  placeholder: string;
  /** Texto de ajuda exibido abaixo do input */
  helpText?: string;
  /** Define se o input está habilitado */
  enabled?: boolean;
  /** Define se o input é somente leitura */
  readonly?: boolean;
  /** Nome do input */
  name?: string;
  /** Array de tags iniciais */
  tags?: string[];
  /** Tamanho máximo de uma tag */
  maxTagLength?: number;
  /** Número máximo de tags permitidas */
  maxTags?: number;
  /** Define se tags duplicadas são permitidas */
  allowDuplicates?: boolean;
  /** Estado visual do componente */
  state?: "default" | "error" | "success" | "warning";
  /**
   * Função de validação customizada para tags
   * @param tag - A tag que está sendo validada
   * @param existingTags - Array com as tags já existentes
   * @returns true se válida, false ou string com mensagem de erro se inválida
   * @example
   * // Validação para permitir apenas números
   * validator={(tag) => /^\d+$/.test(tag) || "Apenas números são permitidos"}
   *
   * // Validação para evitar palavrões
   * validator={(tag) => !badWords.includes(tag.toLowerCase())}
   */
  validator?: (tag: string, existingTags: string[]) => boolean | string;
  /** Define se a navegação por teclado pelas tags deve ser suprimida */
  suppressTagsKeyboardNavigation?: boolean;
  /** Define se a tecla Backspace deve remover a última tag quando o input está vazio */
  suppressBackspaceToRemove?: boolean;
  /** Evento disparado quando as tags mudam */
  ezChange: EventEmitter<string[]>;
  /** Evento disparado quando uma tag é adicionada */
  ezTagAdded: EventEmitter<string>;
  /** Evento disparado quando uma tag é removida */
  ezTagRemoved: EventEmitter<string>;
  /** Evento disparado quando o input recebe foco */
  ezFocus: EventEmitter<string[]>;
  /** Evento disparado quando o input perde foco */
  ezBlur: EventEmitter<string[]>;
  /** Evento disparado quando uma validação falha */
  ezValidationError: EventEmitter<{
    tag: string;
    error?: string;
  }>;
  /** Emitido quando é digitado no campo de entrada */
  ezType: EventEmitter<string>;
  /** Aplica o foco no campo */
  setFocus(option?: OptionsSetFocus): Promise<void>;
  /** Remove o foco do campo */
  setBlur(): Promise<void>;
  /** Adiciona uma tag programaticamente */
  addTag(tag: string): Promise<boolean>;
  /** Remove uma tag programaticamente */
  removeTag(tag: string): Promise<boolean>;
  /** Limpa todas as tags */
  clearTags(): Promise<void>;
  private addInfoId;
  private initializeKeyboardManager;
  private handleAddCurrentTag;
  private handleAddTag;
  private updateTagFocus;
  private getCurrentActiveTagIndex;
  private setTagFocus;
  private handlePreviousTagFocus;
  private handleNextTagFocus;
  private handleRemoveTag;
  private handleInputChange;
  private handleInputKeyDown;
  private handleInputFocus;
  private handleInputBlur;
  private handleTagClick;
  private handleClearInput;
  componentWillLoad(): Promise<void>;
  componentDidLoad(): void;
  disconnectedCallback(): void;
  render(): any;
}
