import { Vue } from "./vue"; // Scoped slots can technically return anything if used from // a render function, but this is "good enough" for templates export type ScopedSlot = (props: any) => ScopedSlotChildren; export type ScopedSlotChildren = ScopedSlotArrayContents | VNode | string | undefined; export interface ScopedSlotArrayContents extends Array {} // Relaxed type compatible with $createElement export type VNodeChildren = VNodeChildrenArrayContents | [ScopedSlot] | string | boolean | null | undefined; export interface VNodeChildrenArrayContents extends Array {} export interface VNode { tag?: string; data?: VNodeData; children?: VNode[]; text?: string; elm?: Node; ns?: string; context?: Vue; key?: string | number; componentOptions?: VNodeComponentOptions; componentInstance?: Vue; parent?: VNode; raw?: boolean; isStatic?: boolean; isRootInsert: boolean; isComment: boolean; } export interface VNodeComponentOptions { Ctor: typeof Vue; propsData?: object; listeners?: object; children?: VNode[]; tag?: string; } export interface VNodeData { key?: string | number; slot?: string; scopedSlots?: { [key: string]: ScopedSlot | undefined }; ref?: string; refInFor?: boolean; tag?: string; staticClass?: string; class?: any; staticStyle?: { [key: string]: any }; style?: object[] | object; props?: { [key: string]: any }; attrs?: { [key: string]: any }; domProps?: { [key: string]: any }; hook?: { [key: string]: Function }; on?: { [key: string]: Function | Function[] }; nativeOn?: { [key: string]: Function | Function[] }; transition?: object; show?: boolean; inlineTemplate?: { render: Function; staticRenderFns: Function[]; }; directives?: VNodeDirective[]; keepAlive?: boolean; } export interface VNodeDirective { name: string; value?: any; oldValue?: any; expression?: any; arg?: string; modifiers?: { [key: string]: boolean }; }