export declare const contributionPlacements: readonly ["sidebarMenu", "profileSection", "pluginSettings", "chatMenu", "composerIcon", "composerMenu", "messageMenu"]; export type PluginContributionPlacement = (typeof contributionPlacements)[number]; export type PluginAudience = { scope: "all_users" | "user"; }; export type PluginAppPresentation = "sidebar" | "detached"; export type PluginAppOpenPresentation = "primary" | "modal" | "fullscreen"; export type JsonObject = { readonly [key: string]: JsonValue; }; export type JsonValue = boolean | null | number | string | JsonObject | readonly JsonValue[]; export interface PluginToolAction { toolName: string; openApp?: { instanceKey: string; presentation: PluginAppOpenPresentation; }; } export interface PluginControlBase { id: string; title: string; description: string; } export interface PluginButtonControl extends PluginControlBase { kind: "button"; assetId: string; action: PluginToolAction; } export interface PluginCheckboxControl extends PluginControlBase { kind: "checkbox"; checked: boolean; action: PluginToolAction; } export interface PluginCheckboxGroupControl extends PluginControlBase { kind: "checkboxGroup"; options: readonly PluginControlBase[]; selectedOptionIds: readonly string[]; action: PluginToolAction; } export interface PluginInputControl extends PluginControlBase { kind: "input"; value: string; placeholder?: string; action: PluginToolAction; } export interface PluginTextControl extends PluginControlBase { kind: "text"; text: string; } export type PluginInteractiveControl = PluginButtonControl | PluginCheckboxControl | PluginCheckboxGroupControl | PluginInputControl; export type PluginContributionSpec = PluginButtonControl | (PluginControlBase & { kind: "staticMenu"; items: readonly PluginButtonControl[]; }) | (PluginControlBase & { kind: "asyncMenu"; resolverToolName: string; }) | (PluginControlBase & { kind: "section"; controls: readonly (PluginInteractiveControl | PluginTextControl)[]; }); export interface PluginAppDefinition { assetId: string; audience: PluginAudience; context: JsonObject; description: string; instanceKey: string; position: number; presentation: PluginAppPresentation; resourceUri: string; revision?: number; title: string; } export interface PluginContributionDefinition { audience: PluginAudience; description: string; externalKey: string; location: PluginContributionPlacement; position: number; revision?: number; spec: PluginContributionSpec; title: string; } /** Strictly parses one plugin-owned durable app definition into the bounded host representation. */ export declare function pluginAppDefinitionParse(value: unknown): PluginAppDefinition; /** Strictly parses one native contribution and enforces the placement-to-control matrix. */ export declare function pluginContributionDefinitionParse(value: unknown): PluginContributionDefinition; /** Strictly parses an app context payload at the same JSON and complexity boundary as app puts. */ export declare function pluginAppContextParse(value: unknown): JsonObject; /** Validates a plugin-controlled stable identifier before using it as a durable natural key. */ export declare function pluginSurfaceIdentifier(value: unknown, name: string, maximum: number): string; /** Converts a bounded numeric plugin position into a lexically sortable durable key. */ export declare function pluginPositionEncode(value: number): string; /** Restores a validated durable position key to its public numeric form. */ export declare function pluginPositionDecode(value: string): number; /** Serializes a bounded JSON object and rechecks the durable 32 KiB limit. */ export declare function pluginSurfaceJson(value: JsonObject | PluginContributionSpec): string; //# sourceMappingURL=surfaceDefinition.d.ts.map