import { ComponentOptionsMixin, defineComponent, DefineComponent, h, ReservedProps, VNodeProps } from 'vue'; import EventEmitter from 'eventemitter3'; import { AnimateProps, BaseProps, BezierProps, CirclesProps, CommentProps, ConatinerCustomProps, ContainerProps, CustomProps, DamageProps, EllipseProps, IconProps, ImageProps, LayerGroupProps, LayerProps, LineProps, PathProps, QuadraticProps, RectProps, RectRProps, ShaderProps, SpriteProps, TextProps, WinskinProps } from './props'; import { ERenderItemEvent, RenderItem, ESpriteEvent, EContainerEvent, EShaderEvent } from '@motajs/render-core'; import { EIconEvent, EImageEvent, ETextEvent, EWinskinEvent, ELayerEvent, ELayerGroupEvent, EAnimateEvent, EGraphicItemEvent } from '@motajs/render-elements'; export type WrapEventEmitterEvents = T extends string | symbol ? T : { [P in keyof T]: T[P] extends any[] ? (...args: T[P]) => void : (...args: any[]) => void; }; type MappingEvent = { [P in keyof WrapEventEmitterEvents as P extends string ? `on${Capitalize

}` : never]?: WrapEventEmitterEvents[P]; }; type _Define

= DefineComponent< P, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, WrapEventEmitterEvents, Exclude, number | symbol>, VNodeProps, Readonly

> >; export type TagDefine = T & MappingEvent & ReservedProps; declare module 'vue/jsx-runtime' { namespace JSX { export interface IntrinsicElements { sprite: TagDefine; container: TagDefine; 'container-custom': TagDefine< ConatinerCustomProps, EContainerEvent >; shader: TagDefine; text: TagDefine; image: TagDefine; comment: TagDefine; custom: TagDefine; layer: TagDefine; 'layer-group': TagDefine; damage: TagDefine; animation: TagDefine; 'g-rect': TagDefine; 'g-circle': TagDefine; 'g-ellipse': TagDefine; 'g-line': TagDefine; 'g-bezier': TagDefine; 'g-quad': TagDefine; 'g-path': TagDefine; 'g-rectr': TagDefine; icon: TagDefine; winskin: TagDefine; } } } export interface InstancedElementProp { item: RenderItem; } export function wrapInstancedComponent< P extends BaseProps = BaseProps, E extends ERenderItemEvent = ERenderItemEvent, C extends RenderItem = RenderItem >(onCreate: (props: P) => C): _Define { const Com = defineComponent((props, ctx) => { return () => { const p = { ...props, ...ctx.attrs, _item: onCreate }; return h('custom', p, ctx.slots); }; }); return Com as _Define; }