import * as React from 'react';
import type { Externals } from "../CodeHighlighter/types.mjs";
type DefaultController = React.ComponentType<{
  children: React.ReactNode;
}>;
type Simplify<T> = { [K in keyof T]: T[K] } & {};
type ControllerProps<C extends DefaultController> = Simplify<Omit<React.ComponentProps<C>, 'children'>>;
export type CreateDemoClientMeta<C extends DefaultController> = {
  name?: string;
  slug?: string;
  displayName?: string;
  variantType?: string;
  skipPrecompute?: boolean;
  precompute?: {
    externals?: Externals;
    [key: string]: any;
  };
  controllerProps?: ControllerProps<C>;
  [key: string]: any;
};
type AbstractCreateDemoClientOptions<C extends DefaultController> = {
  DemoController: C;
  [key: string]: any;
};
/**
 * Abstract factory function for creating demo client providers.
 * This creates a provider component that supplies externals to child components.
 *
 * @param options Configuration options for the demo client factory
 * @returns A function that creates demo client providers
 */
export declare function abstractCreateDemoClient<C extends DefaultController>(options: AbstractCreateDemoClientOptions<C>, url: string, meta?: CreateDemoClientMeta<C>): React.ComponentType<{
  children: React.ReactNode;
}>;
export declare function createDemoClientFactory<C extends DefaultController>(options: AbstractCreateDemoClientOptions<C>): (url: string, meta?: CreateDemoClientMeta<C>) => React.ComponentType<{
  children: React.ReactNode;
}>;
export {};