import { HTMLAttributes, PublicProps } from "vue";
type CamelCase = S extends `${infer P1}-${infer P2}${infer P3}` ? `${Lowercase}${Uppercase}${CamelCase}` : Lowercase;
type KeysToCamelCase = {
[K in keyof T as CamelCase]: T[K];
};
type EventMap = {
[event: string]: Event;
};
type EventsToVueProps = {
[K in keyof ElementEvents as `on${Capitalize>}`]?: (value: ElementEvents[K]) => void;
};
/**
* Utility type to define props for Vue component wrapping a custom element.
*
* Note that attribute names should be provided in kebab-case when using the component
* in templates to match the custom element's expected attributes and ensure SSR
* compatibility.
*
* @see https://github.com/vuejs/rfcs/discussions/479
*/
export type CustomElementProps = KeysToCamelCase & HTMLAttributes & PublicProps & EventsToVueProps;
export {};