/**
 * FIXME: This is a duplication of the functionality in futureverse-stateboss to make it available for use within
 * this package. If we import directly from futureverse-stateboss we get an error when building demo-react-app.
 * The error appears to be due to discrepancies between the way the two packages are built. If we can resolve that
 * error this can go, if not we can consider shifting this functionality here permanently. However, this means
 * whoever consumes this package would potentially have access to it. This wouldn't be the worst as this abstraction
 * for react context creation is well tested and useful. Further discussion around the pros and cons of each option
 * is needed.
 */
import React from 'react';
import { type ILogger } from '@sylo/logger';
export type { ILogger } from '@sylo/logger';
export type ContainerProviderProps<State = void> = React.PropsWithChildren<State>;
export interface Container<Value, State = void> {
    Provider: React.ComponentType<ContainerProviderProps<State>>;
    useContainer: () => Value;
}
export declare function LoggerProvider(props: ContainerProviderProps<{
    scope?: string;
    logger?: ILogger;
}>): React.ReactElement;
export declare function useLogger(scope?: string, overrideLogger?: ILogger): ILogger;
export declare function local(scope: string | null, logger: ILogger): ILogger;
/**
 * Create a container blessed with the capability to call 'useLogger' with a
 * custom 'scope.' The given scope is prepended to all logs the logger emits.
 * Nested containers chain all parent contexts.
 */
export declare function createContainer<Value, Props = any>(useHook: (logger: ILogger, props: Props) => Value, options?: {
    dynamicScope?: (state: Value) => string;
    componentName?: string;
    wrapper?: (props: {
        value: Value;
        children: React.ReactNode;
    }) => React.ReactElement;
}): Container<Value, Props>;
