import * as React from 'react';
import { SvelteComponent } from 'svelte';
import * as Vue from 'vue';

type SveltePropsToProps<Props extends Record<string, any>, Events extends Record<string, any>> = Props & {
    [evt in keyof Events as `on${Capitalize<evt & string>}`]?: Events[evt] extends infer P ? (payload: P) => void : never;
};
type SvelteComponentType<P extends Record<string, any> = any, E extends Record<string, any> = any> = typeof SvelteComponent<P, E>;

declare function createReactComponent<Component extends SvelteComponentType>(svelteComponent: Component): Component extends SvelteComponentType<infer P, infer E> ? React.ComponentType<SveltePropsToProps<P, E>> : never;

declare function createVueComponent<Component extends SvelteComponentType>(svelteComponent: Component): Component extends SvelteComponentType<infer P, infer E> ? Vue.DefineComponent<SveltePropsToProps<P, E>> : never;

export { createReactComponent, createVueComponent };
