import type Collection from "@arcgis/core/core/Collection";
import type SubtypeGroupLayer from "@arcgis/core/layers/SubtypeGroupLayer.js";
import FeatureType from "@arcgis/core/layers/support/FeatureType.js";
import type Field from "@arcgis/core/layers/support/Field.js";
import type PortalItem from "@arcgis/core/portal/PortalItem";
import type { Attachment, AttachmentProperties } from "../data/Attachment.js";
import type { Feature } from "../data/Feature.js";
import type { FeatureReadOptions, FeatureSource, FeatureWriteOptions } from "../data/FeatureSource";
import type { QuerySourceCapabilities } from "../data/QuerySourceCapabilities";
import type { Schema } from "../data/Schema";
import type { Relationship } from "../data/_Relationship";
import type { SubtypeGroupLayerJson } from "../json/SubtypeGroupLayerJson.js";
import type { PropertyDefs } from "../support/Serializable.js";
import { ArcGISRelationshipCollection } from "../support/_ArcGISRelationshipCollection.js";
import type { SubtypeSublayerExtensionCollection, SubtypeSublayerExtensionProperties, SubtypeSublayerExtension } from "./SubtypeSublayerExtension.js";
import type { LayerExtensionProperties, LayerExtensionSchemaPropertyBinding, LayerProperties } from "./_LayerExtension.js";
import { LayerExtension, LayerExtensionReadOnlySchema } from "./_LayerExtension.js";
/**
 * Properties that can be passed into the constructor for
 * {@link SubtypeGroupLayerExtension}.
 */
export interface SubtypeGroupLayerExtensionProperties extends LayerExtensionProperties {
    /**
     * See {@link mapping/_LayerExtension!LayerExtension.layer}.
     */
    layer?: SubtypeGroupLayer | (SubtypeGroupLayerJson & LayerProperties);
    /**
     * See {@link mapping/_LayerExtension!LayerExtension.sublayerExtensions}.
     */
    sublayerExtensions?: (SubtypeSublayerExtension | SubtypeSublayerExtensionProperties)[];
    /**
     * See {@link SubtypeGroupLayerExtension.enableClientSideData}.
     */
    enableClientSideData?: boolean;
    /**
     * A list of the valid file MIME types that can be uploaded as attachments.
     * For list of supported attachment types, see:
     * https://developers.arcgis.com/rest/services-reference/enterprise/query-attachments-feature-service-layer-.htm.
     */
    attachmentTypes?: string[];
}
/**
 * Extends the capabilities of an Esri SubtypeGroupLayer object.
 */
export declare class SubtypeGroupLayerExtension extends LayerExtension<SubtypeGroupLayerExtensionProperties> {
    /**
     * A list of the valid file MIME types that can be uploaded as attachments.
     */
    attachmentTypes: string[];
    /**
     * Indicates that the layer's data should be available client-side, within
     * the graphics that render on the map. Client-side data allows for fast
     * identify operations to be performed, as no external queries are
     * necessary; however, this can cause the map's load time to increase. When
     * enabled, all fields that are configured in the layer's PopupTemplate will
     * load client-side. The default is false.
     */
    get enableClientSideData(): boolean;
    set enableClientSideData(isEnabled: boolean);
    get layer(): SubtypeGroupLayer;
    get sublayerExtensions(): SubtypeSublayerExtensionCollection;
    /**
     * @inheritDoc
     */
    readonly allSublayerExtensions: SubtypeSublayerExtensionCollection;
    get supportsSublayers(): boolean;
    get sublayersAreReadOnly(): boolean;
    get hasFeatures(): boolean;
    get canChangeDefinitionExpression(): boolean;
    private _enableClientSideData;
    constructor(properties?: SubtypeGroupLayerExtensionProperties);
    protected _createRelationships(): Collection<Relationship>;
    protected _onInitialize(): Promise<void>;
    protected _postInitialize(): Promise<void>;
    protected _capabilities(): QuerySourceCapabilities;
    protected _createSublayerExtension(properties?: SubtypeSublayerExtensionProperties): SubtypeSublayerExtension;
    protected _getSerializableProperties(): PropertyDefs<SubtypeGroupLayerExtensionProperties>;
    /**
     * @inheritDoc
     */
    protected _isSupportedLayer(layer: SubtypeGroupLayer): boolean;
    protected _createSchema(): Schema;
    protected _getAttachments(feature: Feature): Promise<Attachment[]>;
    protected _addAttachment(feature: Feature, attachment: Attachment | AttachmentProperties | File): Promise<Attachment>;
    protected _deleteAttachments(feature: Feature, attachments: (Attachment | string)[]): Promise<void>;
    protected _applyPortalItemProperties(portalItem: PortalItem): Promise<void>;
    protected _getFeatures(ids: string[], options?: FeatureReadOptions): AsyncIterable<Feature>;
    protected _addFeatures(features: Iterable<Feature>, options?: FeatureWriteOptions): Promise<void>;
    /**
     * @inheritDoc
     */
    protected _updateFeatures(features: Iterable<Feature>, options?: FeatureWriteOptions): Promise<void>;
    /**
     * @inheritDoc
     */
    protected _deleteFeatures(ids: string[], options?: FeatureWriteOptions): Promise<void>;
    private readonly _onSubtypeSublayersChange;
    private _updateClientSideFields;
    private _updateSubtypes;
    private _addTemplatesToSublayers;
    private _addDomainsToFields;
}
/**
 * An implementation of Schema that directly mirrors the spatial reference on
 * SubtypeGroupLayer. Spatial reference is read only for SubtypeGroupLayer.
 */
export declare class SubtypeGroupLayerSchema extends LayerExtensionReadOnlySchema {
    private readonly _fieldCollection;
    private readonly _typesCollection;
    constructor(layerExtension: LayerExtension);
    get types(): Collection<FeatureType>;
    get _fields(): Collection<Field>;
    /**
     * Creates the backing collection for fields.
     */
    protected _createFieldCollection(): Collection<Field>;
    /**
     * Creates the backing collection for fields.
     */
    protected _createTypesCollection(): Collection<FeatureType>;
    protected _getPropertyBindings(): Partial<Record<keyof this, LayerExtensionSchemaPropertyBinding>>;
}
/**
 * Implementation of the
 * {@link support/_ArcGISRelationshipCollection!ArcGISRelationshipCollection}
 * specific to SubtypeGroupLayer.
 */
export declare class SubtypeGroupLayerRelationshipCollection extends ArcGISRelationshipCollection {
    /**
     * @inheritDoc
     */
    protected readonly _source: SubtypeGroupLayerExtension;
    /**
     * @inheritDoc
     */
    protected get _sourceUrl(): string;
    /**
     * @inheritDoc
     */
    protected get _sourceLayerId(): number;
    /**
     * @inheritDoc
     */
    protected _findRelatedSource(relatedLayerId: number): FeatureSource;
}
