import { ConfiguredExtension } from '@sourcegraph/extensions-client-common/lib/extensions/extension';
import * as React from 'react';
import { RouteComponentProps } from 'react-router';
import * as GQL from '../../backend/graphqlschema';
import { ConfigurationCascadeProps, ExtensionsProps } from '../../extensions/ExtensionsClientCommonContext';
import { RouteDescriptor } from '../../util/contributions';
import { ErrorLike } from '../../util/errors';
import { ExtensionsAreaRouteContext } from '../ExtensionsArea';
import { ExtensionAreaHeaderNavItem } from './ExtensionAreaHeader';
export declare const registryExtensionFragment: import("../../backend/graphql").GraphQLDocument;
export interface ExtensionAreaRoute extends RouteDescriptor<ExtensionAreaRouteContext> {
}
export interface ExtensionAreaProps extends ExtensionsAreaRouteContext, RouteComponentProps<{
    extensionID: string;
}> {
    routes: ReadonlyArray<ExtensionAreaRoute>;
    isLightTheme: boolean;
    extensionAreaHeaderNavItems: ReadonlyArray<ExtensionAreaHeaderNavItem>;
}
interface ExtensionAreaState {
    /** The registry extension, undefined while loading, or an error.  */
    extensionOrError?: ConfiguredExtension<GQL.IRegistryExtension> | ErrorLike;
}
/**
 * Properties passed to all page components in the registry extension area.
 */
export interface ExtensionAreaRouteContext extends ConfigurationCascadeProps, ExtensionsProps {
    /** The extension registry area main URL. */
    url: string;
    /** The extension that is the subject of the page. */
    extension: ConfiguredExtension<GQL.IRegistryExtension>;
    /** Called when the component updates the extension and it should be refreshed here. */
    onDidUpdateExtension: () => void;
    /** The currently authenticated user. */
    authenticatedUser: GQL.IUser | null;
    isLightTheme: boolean;
}
/**
 * An extension area.
 */
export declare class ExtensionArea extends React.Component<ExtensionAreaProps> {
    state: ExtensionAreaState;
    private componentUpdates;
    private refreshRequests;
    private subscriptions;
    componentDidMount(): void;
    componentWillReceiveProps(props: ExtensionAreaProps): void;
    componentWillUnmount(): void;
    render(): JSX.Element | null;
    private onDidUpdateExtension;
}
export {};
//# sourceMappingURL=ExtensionArea.d.ts.map