import PopupTemplate from "@arcgis/core/PopupTemplate";
import type Collection from "@arcgis/core/core/Collection";
import type SpatialReference from "@arcgis/core/geometry/SpatialReference";
import type Content from "@arcgis/core/popup/content/Content.js";
import type { HyperlinkProperties } from "../Hyperlink.js";
import { Hyperlink } from "../Hyperlink.js";
import type { PopupInfoJson } from "../json/PopupInfoJson.js";
import type { FormatSettingsProperties } from "../support/FormatSettings.js";
import { FormatSettings } from "../support/FormatSettings.js";
import type { InitializableCollection } from "../support/InitializableCollectionProxy.js";
import type { PropertyDefs, SerializeMode } from "../support/Serializable.js";
import { Settings, type SettingsEvents } from "../support/Settings.js";
import type { Feature } from "./Feature.js";
import type { FeatureSource } from "./FeatureSource.js";
import type { PopupContentExtensionProperties } from "./PopupContentExtension.js";
import { PopupContentExtension } from "./PopupContentExtension.js";
/**
 * Properties that can be passed into the constructor for
 * {@link data/FeatureSettings!FeatureSettings}.
 */
export interface FeatureSettingsProperties {
    /**
     * Templates that define hyperlinks associated with the feature. Each
     * template's properties can contain field tokens enclosed in `{}`, which
     * will be replaced by actual field values. If not explicitly set, these
     * will be inherited from the associated layer extension if there is one.
     */
    hyperlinkTemplates?: (Hyperlink | HyperlinkProperties)[];
    /**
     * The template for displaying content in a pop-up when the feature is
     * selected. If not explicitly set, it will be inherited from the associated
     * layer extension if there is one.
     */
    popupTemplate?: PopupTemplate | PopupInfoJson;
    /**
     * Settings affecting how feature attributes are formatted.
     */
    formatSettings?: FormatSettingsProperties;
    /**
     * See {@link data/FeatureSettings!FeatureSettings.outFields}.
     */
    outFields?: string[];
    /**
     * See {@link data/FeatureSettings!FeatureSettings.returnGeometry}.
     */
    returnGeometry?: boolean;
    /**
     * See {@link data/FeatureSettings!FeatureSettings.outSpatialReference}.
     */
    outSpatialReference?: SpatialReference;
    /**
     * See {@link data/FeatureSettings!FeatureSettings.maxAllowableOffset}.
     */
    maxAllowableOffset?: number;
    /**
     * See {@link data/FeatureSettings!FeatureSettings.zoomScale}.
     */
    zoomScale?: number;
    /**
     * See {@link data/FeatureSettings!FeatureSettings.zoomFactor}.
     */
    zoomFactor?: number;
    /**
     * See {@link data/FeatureSettings!FeatureSettings.popupContentExtensions}.
     */
    popupContentExtensions?: (PopupContentExtension | PopupContentExtensionProperties)[];
    /**
     * See
     * {@link data/FeatureSettings!FeatureSettings.showRelatedRecordsWhenUnconfigured}.
     */
    showRelatedRecordsWhenUnconfigured?: boolean;
}
/**
 * Settings that pertain to features.
 */
export declare class FeatureSettings extends Settings<FeatureSettingsProperties> {
    /**
     * @deprecated Do not directly reference this property. Use EventNames and
     *   EventTypes helpers from @arcgis/core/Evented.
     */
    "@eventTypes": SettingsEvents<FeatureSettings>;
    /**
     * The PopupContentExtensions associated with each popupContent of the
     * schema.
     */
    readonly popupContentExtensions: PopupContentExtensionCollection;
    private _popupContentCollection;
    /**
     * Templates that define hyperlinks associated with the feature. Each
     * template's properties can contain field tokens enclosed in `{}`, which
     * will be replaced by actual field values.
     */
    get hyperlinkTemplates(): Collection<Hyperlink>;
    /**
     * The template for displaying content in a pop-up when the feature is
     * selected.
     */
    get popupTemplate(): PopupTemplate | undefined;
    set popupTemplate(value: PopupTemplate | undefined);
    /**
     * Whether all related records should be shown, even if not found configured
     * in the web map popup.
     */
    get showRelatedRecordsWhenUnconfigured(): boolean;
    set showRelatedRecordsWhenUnconfigured(value: boolean);
    /**
     * Settings affecting how feature attributes are formatted.
     */
    get formatSettings(): FormatSettings;
    /**
     * Whether geometry for features should be returned by default.
     */
    get returnGeometry(): boolean;
    set returnGeometry(value: boolean);
    /**
     * Fields that should be returned for each feature by default.
     */
    get outFields(): string[];
    set outFields(value: string[]);
    /**
     * The default spatial reference for the returned geometry.
     */
    get outSpatialReference(): SpatialReference;
    set outSpatialReference(value: SpatialReference);
    /**
     * The default maximum allowable offset used for generalizing geometries
     * returned by the query operation.
     */
    get maxAllowableOffset(): number;
    set maxAllowableOffset(value: number);
    /**
     * The scale to zoom the map to when zooming to a feature. This will
     * override zoomFactor if also set.
     */
    get zoomScale(): number;
    set zoomScale(value: number);
    /**
     * Specifies the desired extent to zoom to when zooming to a feature as a
     * multiple of the feature's extent. The default is 1.5. Not applicable for
     * features whose geometry is a point.
     */
    get zoomFactor(): number;
    set zoomFactor(value: number);
    /**
     * The {@link data/FeatureSource!FeatureSource} that this schema belongs to.
     */
    get featureSource(): FeatureSource;
    /**
     * The {@link data/Feature!Feature} that this schema belongs to.
     */
    get feature(): Feature;
    private _featureSource;
    private _feature;
    constructor(properties?: FeatureSettingsProperties);
    destroy(): void;
    /**
     * Returns the default outFields for the corresponding FeatureSource.
     */
    protected get _defaultOutFields(): string[];
    toJSON(serializeMode?: SerializeMode): FeatureSettingsProperties;
    protected _hasSettingIncludingAncestor<K extends keyof this>(setting: K): boolean;
    /**
     * Creates the backing collection for popup content.
     */
    protected _createPopupContentCollection(): Collection<Content>;
    protected _getSerializableProperties(): PropertyDefs<FeatureSettingsProperties>;
    private _hyperlinksAreEquivalent;
}
/**
 * The collection of PopupContentExtensions belonging to a {@link data/Schema}.
 */
export interface PopupContentExtensionCollection extends InitializableCollection<PopupContentExtensionProperties, PopupContentExtension> {
    /**
     * Returns the PopupContentExtension for the given popup content item.
     *
     * @param content The popup content item to get the PopupContentExtension
     *   for.
     */
    forContent(content: Content): PopupContentExtension;
}
