import { ComponentOptionsMixin, DefineComponent, EmitsToProps, HTMLAttributes, PublicProps } from 'vue'; import { WebUiElementMap } from '../components'; import { ComponentEvents, ExtractProps, OmitLitBase, WithHost } from './utils'; type VueEmits = T extends { readonly $events: infer E; } ? { [K in keyof E]: (e: WithHost) => void; } : Record; type VueNativeAttrs = Omit & string>}`>; type VueProps = ExtractProps> & VueNativeAttrs; type VueResolvedProps = Readonly> & (VueEmits extends Record ? unknown : EmitsToProps>); /** * Lit Web Component 的 Vue 包装类型。 * * - Props: 组件属性 + 局部 HTMLAttributes(含原生 DOM 事件),不污染其他 Vue 组件 * - Emits: 从 $events 提取的宿主化事件,Volar 可识别 @event 绑定 * - TypeEl: 模板 ref/$el 类型为具体 Custom Element 实例 * - 不再全局扩展 ComponentCustomProps */ export type LitVueWrapper = DefineComponent, Record, Record, Record, Record, ComponentOptionsMixin, ComponentOptionsMixin, VueEmits, string, PublicProps, VueResolvedProps, Record, Record, Record, Record, string, Record, true, Record, T>; export type WebUiComponents = { [K in keyof WebUiElementMap]: LitVueWrapper; }; declare module 'vue' { interface GlobalComponents extends WebUiComponents { } } export {};