import { GraphvizLayouter } from '@likec4/layouts';
import { type Module, DocumentCache, WorkspaceCache } from 'langium';
import { type DefaultSharedModuleContext, type LangiumServices, type LangiumSharedServices, type PartialLangiumServices } from 'langium/lsp';
import { LikeC4DocumentationProvider } from './documentation';
import { LikeC4CodeLensProvider, LikeC4CompletionProvider, LikeC4DocumentHighlightProvider, LikeC4DocumentLinkProvider, LikeC4DocumentSymbolProvider, LikeC4HoverProvider, LikeC4SemanticTokenProvider } from './lsp';
import { DeploymentsIndex, FqnIndex, LikeC4ModelBuilder, LikeC4ModelLocator, LikeC4ModelParser } from './model';
import { LikeC4ModelChanges } from './model-change/ModelChanges';
import { LikeC4NameProvider, LikeC4ScopeComputation, LikeC4ScopeProvider } from './references';
import { Rpc } from './Rpc';
import { LikeC4WorkspaceManager, NodeKindProvider, WorkspaceSymbolProvider } from './shared';
import { LikeC4Views } from './views';
interface LikeC4AddedSharedServices {
    lsp: {
        NodeKindProvider: NodeKindProvider;
        WorkspaceSymbolProvider: WorkspaceSymbolProvider;
    };
    workspace: {
        WorkspaceManager: LikeC4WorkspaceManager;
    };
}
export type LikeC4SharedServices = LangiumSharedServices & LikeC4AddedSharedServices;
/**
 * Declaration of custom services - add your own service classes here.
 */
export interface LikeC4AddedServices {
    documentation: {
        DocumentationProvider: LikeC4DocumentationProvider;
    };
    WorkspaceCache: WorkspaceCache<string, any>;
    DocumentCache: DocumentCache<string, any>;
    Rpc: Rpc;
    likec4: {
        Views: LikeC4Views;
        Layouter: GraphvizLayouter;
        DeploymentsIndex: DeploymentsIndex;
        FqnIndex: FqnIndex;
        ModelParser: LikeC4ModelParser;
        ModelBuilder: LikeC4ModelBuilder;
        ModelLocator: LikeC4ModelLocator;
        ModelChanges: LikeC4ModelChanges;
    };
    lsp: {
        CompletionProvider: LikeC4CompletionProvider;
        DocumentHighlightProvider: LikeC4DocumentHighlightProvider;
        DocumentSymbolProvider: LikeC4DocumentSymbolProvider;
        SemanticTokenProvider: LikeC4SemanticTokenProvider;
        HoverProvider: LikeC4HoverProvider;
        CodeLensProvider: LikeC4CodeLensProvider;
        DocumentLinkProvider: LikeC4DocumentLinkProvider;
    };
    references: {
        NameProvider: LikeC4NameProvider;
        ScopeComputation: LikeC4ScopeComputation;
        ScopeProvider: LikeC4ScopeProvider;
    };
    shared?: LikeC4SharedServices;
}
export type LikeC4Services = LangiumServices & LikeC4AddedServices;
export declare const LikeC4Module: Module<LikeC4Services, PartialLangiumServices & LikeC4AddedServices>;
export type LanguageServicesContext = Partial<DefaultSharedModuleContext>;
export declare function createCustomLanguageServices<I1, I2, I3, I extends I1 & I2 & I3 & LikeC4Services>(context: LanguageServicesContext, module?: Module<I, I1>, module2?: Module<I, I2>, module3?: Module<I, I3>): {
    shared: LikeC4SharedServices;
    likec4: I;
};
export declare function createSharedServices(context?: LanguageServicesContext): LikeC4SharedServices;
export declare function createLanguageServices(context?: LanguageServicesContext): {
    shared: LikeC4SharedServices;
    likec4: LikeC4Services;
};
export {};
