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 } from '../item'; import { ESpriteEvent } from '../sprite'; import { EContainerEvent } from '../container'; import { EIconEvent, EImageEvent, ETextEvent, EWinskinEvent } from '../preset/misc'; import { ELayerEvent, ELayerGroupEvent } from '../preset/layer'; import { EAnimateEvent } from '../preset/animate'; import { EDamageEvent } from '../preset/damage'; import { EShaderEvent } from '../shader'; import { EGraphicItemEvent } from '../preset/graphics'; 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

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