/**
 * @license
 * Copyright 2023 Tyler Technologies, Inc. 
 * License: Apache-2.0
 */
import { IFontInfo } from '@tylertech/forge-core';
import { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';
import { IFloatingLabel } from '../floating-label/floating-label';
import { IFieldComponent } from './field';
export interface IFieldAdapter extends IBaseAdapter {
    setRootClass(classes: string | string[]): void;
    removeRootClass(classes: string | string[]): void;
    addInputListener(type: string, listener: (evt: Event) => void): void;
    removeInputListener(type: string, listener: (evt: Event) => void): void;
    setInputClass(className: string): void;
    removeInputClass(className: string): void;
    addLabelSlotListener(listener: (evt: Event) => void): void;
    removeLabelSlotListener(listener: (evt: Event) => void): void;
    setLabelClass(name: string): void;
    removeLabelClass(name: string): void;
    isLabelFloating(): boolean;
    addLeadingSlotListener(listener: (evt: Event) => void): void;
    removeLeadingSlotListener(listener: (evt: Event) => void): void;
    addTrailingSlotListener(listener: (evt: Event) => void): void;
    removeTrailingSlotListener(listener: (evt: Event) => void): void;
    addAddonEndSlotListener(listener: (evt: Event) => void): void;
    removeAddonEndSlotListener(listener: (evt: Event) => void): void;
    hasAddonEndNodes(): boolean;
    hasLabel(): boolean;
    hasLeadingNodes(): boolean;
    hasPlaceholder(): boolean;
    hasTrailingNodes(): boolean;
    inputHasFocus(target?: EventTarget | null): boolean;
    inputHasValue(): boolean;
    fieldHasValue(): boolean;
    isDisabled(): boolean;
    isReadonly(): boolean;
    getLabelFontMetrics(): IFontInfo;
    getLabelWidth(fontSize: number, fontFamily: string): number;
    initialize(rootSelector: string): void;
    initializeFloatingLabel(): IFloatingLabel;
    ensureSlottedLabel(): void;
    destroy(): void;
    setValueChangedListener(context: any, listener: (value: any) => void): void;
    destroyValueChangeListener(): void;
    detectLabel(): void;
    setRoomy(isRoomy: boolean): void;
    setDense(isDense: boolean): void;
    setInputAttributeObserver(listener: (name: string, value: string | null) => void): void;
}
export declare class FieldAdapter extends BaseAdapter<IFieldComponent> implements IFieldAdapter {
    protected _rootElement: HTMLElement;
    protected _labelSlot: HTMLSlotElement;
    protected _leadingSlot: HTMLSlotElement;
    protected _trailingSlot: HTMLSlotElement;
    protected _addonEndSlot: HTMLSlotElement;
    protected _labelElement: HTMLLabelElement;
    protected _inputElement: HTMLInputElement;
    protected _inputMutationObserver: MutationObserver;
    protected _valueChangeListeners: Array<() => void>;
    constructor(component: IFieldComponent);
    initialize(rootSelector: string): void;
    destroy(): void;
    hasLabel(): boolean;
    ensureSlottedLabel(): void;
    addLabelSlotListener(listener: (evt: Event) => void): void;
    removeLabelSlotListener(listener: (evt: Event) => void): void;
    addLeadingSlotListener(listener: (evt: Event) => void): void;
    removeLeadingSlotListener(listener: (evt: Event) => void): void;
    addTrailingSlotListener(listener: (evt: Event) => void): void;
    removeTrailingSlotListener(listener: (evt: Event) => void): void;
    addAddonEndSlotListener(listener: (evt: Event) => void): void;
    removeAddonEndSlotListener(listener: (evt: Event) => void): void;
    addInputListener(type: string, listener: (evt: Event) => void): void;
    removeInputListener(type: string, listener: (evt: Event) => void): void;
    setValueChangedListener(context: any, listener: (value: any) => void): void;
    destroyValueChangeListener(): void;
    detectLabel(): void;
    initializeFloatingLabel(): IFloatingLabel;
    inputHasValue(): boolean;
    fieldHasValue(): boolean;
    hasPlaceholder(): boolean;
    inputHasFocus(target?: EventTarget | null): boolean;
    setLabelClass(name: string): void;
    removeLabelClass(name: string): void;
    isLabelFloating(): boolean;
    setRoomy(isRoomy: boolean): void;
    setDense(isDense: boolean): void;
    hasLeadingNodes(): boolean;
    hasTrailingNodes(): boolean;
    hasAddonEndNodes(): boolean;
    setInputClass(className: string): void;
    removeInputClass(className: string): void;
    setRootClass(classes: string | string[]): void;
    removeRootClass(classes: string | string[]): void;
    setInputAttributeObserver(listener: (name: string, value: string | null) => void): void;
    isDisabled(): boolean;
    isReadonly(): boolean;
    getLabelWidth(fontSize: number, fontFamily: string): number;
    getLabelFontMetrics(): IFontInfo;
}
