import { PresenterConfig, PresenterFactoryFunction, PresenterHookOutput, Props, View, ViewModelOverride } from './presenter-factory.types';

/**
 * @example
 * const useDocumentOverviewPresenter = presenterFactory(() => {
 *   const state = reactive({ showSkeleton: false })
 *
 *   return {
 *     viewModel: computed(() => {
 *       return {
 *         isPageSkeletonLoaderShown: state.showSkeleton
 *       }
 *     })
 *   }
 * })
 *
 * const { presenter, viewModel } = useDocumentOverviewPresenter()
 */
export declare function presenterFactory<TPresenterOptions extends PresenterConfig, TProps extends Props = void, TView extends View = void>(presenterFactoryFunction: PresenterFactoryFunction<TProps, TView, TPresenterOptions>): {
    (props: TProps, view: TView): PresenterHookOutput<TPresenterOptions>;
    /**
     * @example
     * const wrapper = mount(DocumentOverview)
     * const { viewModel } = useDocumentOverviewPresenter.spy()
     *
     * expect(viewModel.value.amountOfClicks).toBe(0)
     * wrapper.find('button').trigger('click')
     * expect(viewModel.value.amountOfClicks).toBe(1)
     */
    spy(): PresenterHookOutput<TPresenterOptions>;
    resetSpy(): void;
    /**
     * @example
     * useDocumentOverviewPresenter.mockViewModel((viewModel) => {
     *   return {
     *     ...viewModel,
     *     showPageSkeletonLoader: true,
     *   }
     * })
     */
    mockViewModel(viewModelOverrideFunction: ViewModelOverride<TPresenterOptions>): void;
};
