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 {};