import * as React from "react";
import { Session, Basket } from "@intelligentgraphics/igd.productdata";
export interface SessionContextValue<T extends Session = Session> {
    session: T;
    basket?: Basket;
}
export declare const SessionContext: React.Context<SessionContextValue<Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>>>>;
export interface WithSessionContext<T extends Session = Session> extends SessionContextValue<T> {
}
export declare const createWithSessionContext: <T extends Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>> = Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>>, V extends WithSessionContext<T> = WithSessionContext<T>>() => <AllComponentProps extends V>(component: React.ComponentType<AllComponentProps>) => (props: Pick<AllComponentProps, ({ [P in Extract<keyof AllComponentProps, string>]: P; } & { [P_1 in Extract<keyof V, string>]: never; } & {
    [x: string]: never;
})[Extract<keyof AllComponentProps, string>]> & {
    children?: React.ReactNode;
} & Partial<V>) => React.ReactElement<AllComponentProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>;
export declare const withSessionContext: <AllComponentProps extends WithSessionContext<Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>>>>(component: React.ComponentType<AllComponentProps>) => (props: Pick<AllComponentProps, ({ [P in Extract<keyof AllComponentProps, string>]: P; } & {
    session: never;
    basket: never;
} & {
    [x: string]: never;
})[Extract<keyof AllComponentProps, string>]> & {
    children?: React.ReactNode;
} & Partial<WithSessionContext<Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>>>>) => React.ReactElement<AllComponentProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>;
export declare const useSessionContext: () => WithSessionContext<Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>>>;
