import { ArcadeApiContext } from '@arcgis/arcade-languageservice';
import { ApiSnippet } from '@arcgis/languages-api-utils';
import { Uri } from 'monaco-editor';
import { IEditorProfileDefinition, IPredefinedProfile } from '../profile/types';
import { LanguageDefaultsBase } from '../language-defaults-base';
/**
 * Provides default configuration and per-model state management for the Arcade language service.
 *
 * In addition to the base language defaults, this class manages an {@link EditorProfile} and the
 * corresponding API context for each Monaco model. It serializes profile updates on a per-model basis
 * to prevent race conditions when multiple asynchronous profile changes are requested in quick succession.
 *
 * @remarks
 * Profile updates are queued per model key because `setProfileForModel` performs multiple asynchronous steps
 * (e.g., loading localized strings, converting predefined profiles, converting editor profiles to API profiles,
 * and disposing/reinitializing per-model state). Without serialization, an older request could complete after a
 * newer request and overwrite the latest context.
 *
 * @example
 * ```ts
 * await defaults.setProfileForModel(model.uri, predefinedProfile, { locale: "en" });
 * await defaults.setProfileForModel(model.uri, editorProfileDefinition, { locale: "fr", snippets });
 * ```
 */
declare class ArcadeLanguageServiceDefaults extends LanguageDefaultsBase<ArcadeApiContext> {
    #private;
    constructor();
    /**
     * Create an EditorProfile for the given model id using the given definition and locale.
     * The EditorProfile is used by the the Arcade Language service as well by the coding components.
     * The definition can be a pre-defined profile or an editor profile definition.
     * If the locale is not provided then the 'en' locale is used.
     * @param modelId The model id for which to create the context.
     * @param definition The definition to use for the model context.
     * @param locale The locale to use for the model context.
     * @returns The EditorProfile for the model.
     */
    setProfileForModel(modelId: Uri | string, definition: IEditorProfileDefinition | IPredefinedProfile | undefined, apiContext?: {
        locale: string;
        snippets?: ApiSnippet[];
    }): Promise<void>;
}
export declare const arcadeDefaults: ArcadeLanguageServiceDefaults;
export declare const arcade: {
    setProfileForModel: (modelId: Uri | string, definition: IEditorProfileDefinition | IPredefinedProfile | undefined, apiContext?: {
        locale: string;
        snippets?: ApiSnippet[];
    }) => Promise<void>;
    getApiLibraryForModel: (modelId: string) => Promise<import('@arcgis/languages-api-utils').ApiCategory[]>;
};
export type { ArcadeLanguageServiceDefaults };
