import Field from "@arcgis/core/layers/support/Field";
import type FieldInfo from "@arcgis/core/popup/FieldInfo";
import type { EntityBaseProperties } from "../Entity.js";
import { EntityBase } from "../Entity.js";
import type { FieldJson } from "../json/FieldJson.js";
import type { FormatSettingsProperties } from "../support/FormatSettings.js";
import { FormatSettings } from "../support/FormatSettings.js";
import type { PropertyDefs } from "../support/Serializable.js";
import type { Schema } from "./Schema.js";
/**
 * Properties that extend the ArcGis portal representation of a Field.
 */
export interface FieldProperties extends Partial<FieldJson> {
    /**
     * A field name referring to an existing field in a schema. The field
     * extension will attempt to find an existing field in its parent schema.
     */
    $ref?: string;
}
/**
 * Properties that can be passed into the constructor for
 * {@link data/FieldExtension!FieldExtension}.
 */
export interface FieldExtensionProperties extends EntityBaseProperties {
    /**
     * The Esri Field object being extended.
     */
    field?: Field | FieldProperties | string | null;
    /**
     * Whether the field is searchable or not.
     */
    searchable?: boolean;
    /**
     * The field format specifier. This is a standard .NET-style format string
     * containing a `{0}` placeholder that will be replaced by the actual field
     * value.
     */
    format?: string;
    /**
     * Settings that affect how values are formatted. Depending on the type of
     * field, some or all of these settings may not be applicable.
     */
    formatSettings?: FormatSettingsProperties;
}
/**
 * Extends the capabilities of an Esri Field object.
 */
export declare class FieldExtension extends EntityBase<FieldExtensionProperties> {
    /**
     * The Esri Field object being extended.
     */
    get field(): Field;
    /**
     * The parent schema.
     */
    get schema(): Schema;
    /**
     * Whether the field is currently searchable.
     */
    get searchable(): boolean;
    /**
     * Sets whether the field is searchable.
     */
    set searchable(value: boolean);
    /**
     * Whether the underlying field type supports searching.
     */
    get supportsSearchable(): boolean;
    /**
     * The corresponding esri field info object.
     */
    get fieldInfo(): FieldInfo;
    /**
     * The field format specifier. This is a standard .NET-style format string
     * containing as `{0}` placeholder that will be replaced by the actual field
     * value.
     */
    format: string;
    /**
     * Settings that affect how values are formatted. Depending on the type of
     * field, some or all of these settings may not be applicable.
     */
    readonly formatSettings: FormatSettings;
    /**
     * @inheritDoc
     */
    protected readonly _itemType: string;
    private _field;
    /**
     * The cached corresponding esri field info object.
     */
    private _fieldInfo;
    private _schema;
    /**
     * Whether the field is searchable or not.
     */
    private _searchable;
    private _deferredFieldProperties;
    private _originalRef;
    /**
     * Creates a new instance of {@link data/FieldExtension!FieldExtension}.
     *
     * @param properties An object containing initial property values to set.
     */
    constructor(properties?: FieldExtensionProperties);
    /**
     * Checks to see if a field matches a field reference.
     *
     * @param fieldX The field or FieldExtension to match with a reference.
     * @param fieldRef The field reference to match with a field.
     */
    static matchesRef(fieldX: FieldExtension | Field, fieldRef: FieldProperties): boolean;
    destroy(): Promise<void>;
    protected _getSerializableProperties(): PropertyDefs<FieldExtensionProperties>;
    protected _onInitialize(): Promise<void>;
    private _setField;
}
