import { IDisposable, IReader } from "@vscode/observables"; import React, { Context } from "react"; import { IPropertyTransformerFactory } from "./IPropertyTransformer"; import { BaseViewModel, PropsDesc, PropsOut, ViewModelContextSymbol } from "./viewModel"; /** Check if a transformer has _requiredContext defined (injected) */ type HasRequiredContext = T extends { _requiredContext: Context; } ? true : false; /** Required props: non-injected properties that must be provided */ type RequiredProps = { [K in keyof T as HasRequiredContext extends true ? never : K]: T[K] extends IPropertyTransformerFactory ? U : never; }; /** Optional props: injected properties that can be overridden */ type OptionalProps = { [K in keyof T as HasRequiredContext extends true ? K : never]?: T[K] extends IPropertyTransformerFactory ? U : never; }; /** Combined props type: required + optional injected */ type WithOptionalInjected = RequiredProps & OptionalProps; export declare function viewWithModel>>(viewModelCtor: (new (arg: PropsOut) => TModel) & { _props: TModelProps; [ViewModelContextSymbol]?: Context; }, render: (reader: IReader, model: TModel) => React.ReactNode): React.ComponentType>; export declare function viewWithModel>>(viewModelCtor: (new (arg: PropsOut) => TModel) & { _props: TModelProps; [ViewModelContextSymbol]?: Context; }, props: TProps, render: (reader: IReader, model: TModel, props: PropsOut) => React.ReactNode): React.ComponentType & WithOptionalInjected>; export declare function viewWithModel(viewModelCtor: new () => TModel, render: (reader: IReader, model: TModel) => React.ReactNode): React.ComponentType<{}>; export declare function viewWithModel(viewModelCtor: new () => TModel, props: TProps, render: (reader: IReader, model: TModel, props: PropsOut) => React.ReactNode): React.ComponentType>; export {}; //# sourceMappingURL=viewWithModel.d.ts.map