import type { Effect, Scope } from 'effect';
import type { InjectionKey } from 'vue';
import type { ActionContext, OverlayDefinitionNotFoundError } from '../../../composables/useOverlay.js';
import type { Cause, Fetch } from 'fx-fetch';
type BodyParseError = Cause.MalformedArrayBufferError | Cause.MalformedBlobError | Cause.MalformedBytesError | Cause.MalformedFormDataError | Cause.MalformedJsonError | Cause.MalformedReadableStreamError | Cause.MalformedTextError | Cause.BodyIsNotPresentError;
type OverlaySlotProps = Readonly<{
    props: Readonly<any>;
    report: (...args: [value?: unknown]) => void;
    isDesktop: boolean;
}>;
type OverlayBodyRender = (props: OverlaySlotProps) => Array<import('vue').VNode>;
type ActionEffect = Effect.Effect<unknown, Fetch.Fetch.ErrorType | BodyParseError | OverlayDefinitionNotFoundError, Scope.Scope | ActionContext | Fetch.Fetch>;
export type DeclaredButton = Readonly<{
    ownerId: string;
    actionId: string;
    effect?: ActionEffect;
    render?: OverlayBodyRender;
}>;
export interface ButtonRegistry {
    registerAction: (action: DeclaredButton) => void;
    unregisterAction: (actionId: string, ownerId?: string) => void;
    hasAction: (actionId: string) => boolean;
}
export declare const buttonRegistryKey: InjectionKey<ButtonRegistry>;
export {};
