import * as dom from "./dom"; import Vue, { VNode, VNodeData, VNodeChildrenArrayContents, ComponentOptions, VueConstructor } from "vue"; import { ScopedSlot } from "vue/types/vnode"; export interface ElementAdditionalAttrs { // extension point. } export type ScopedSlotReturnType = ReturnType; export type TypedScopedSlot

= (props: P) => ScopedSlotReturnType; export type KnownAttrs = { class?: VNodeData["class"]; staticClass?: VNodeData["staticClass"]; key?: VNodeData["key"]; ref?: VNodeData["ref"] | { value: unknown }; slot?: VNodeData["slot"]; style?: VNodeData["style"] | string; domProps?: VNodeData["domProps"]; attrs?: VNodeData["attrs"]; hook?: VNodeData["hook"]; on?: VNodeData["on"]; nativeOn?: VNodeData["nativeOn"]; id?: string; refInFor?: boolean; domPropsInnerHTML?: string; }; export type Arg1 = T extends (arg1: infer A1) => any | undefined ? A1 : never; export type InnerScopedSlotReturnType = Vue["$scopedSlots"] extends { [name: string]: ((...args: any[]) => infer T) | undefined; } ? T : never; export type InnerScopedSlot = (props: T) => InnerScopedSlotReturnType; export type InnerScopedSlots = { [K in keyof T]: InnerScopedSlot> }; export type ScopedSlotHandlers = { [K in keyof InnerSSType]: TypedScopedSlot>; }; export type EventHandler = [E] extends [(...args: any[]) => any] ? E : (payload: E) => void; export type EventHandlers = { [K in keyof E]?: EventHandler | EventHandler[] }; export type DeclareProps

= { props: P }; export type DeclareOnEvents = { onEvents: E }; export type DeclareOn = { events: E }; export type DeclareAttributes = { attributes: A }; export type TsxComponentTypeInfo = DeclareProps & DeclareOnEvents & DeclareOn & DeclareAttributes; export type TsxTypeInfoOf = V extends { _tsx: infer T } ? T : {}; export type PropsOf = TsxTypeInfoOf extends DeclareProps ? X : {}; export type PrefixedEventsOf = TsxTypeInfoOf extends DeclareOnEvents ? X : {}; export type OnOf = TsxTypeInfoOf extends DeclareOn ? X : {}; export type AttributesOf = TsxTypeInfoOf extends DeclareAttributes ? X : {}; export type IsPropsObjectAllowed = V extends { _tsx_allowPropsObject: true } ? true : false; type CombinedTsxComponentAttrsOtherThanProps = KnownAttrs & Attributes & EventHandlers & { on?: EventHandlers & VNodeData["on"]; scopedSlots?: ScopedSlotHandlers; }; type CombinedTsxComponentAttrs< Attributes, Props, PrefixedEvents, On, InnerSS, AllowPropsObject extends boolean > = | (AllowPropsObject extends true ? { props: Props } & Partial & CombinedTsxComponentAttrsOtherThanProps : never) | (Props & CombinedTsxComponentAttrsOtherThanProps); export type ElementAttrs = E[1] & KnownAttrs & EventHandlers> & { on?: EventHandlers>; } & ElementAdditionalAttrs; export interface Element extends VNode {} export interface ElementClass extends Vue {} export type IntrinsicElements = { [K in keyof dom.IntrinsicElementTypes]: ElementAttrs; }; type PropNameCandidates = Exclude< keyof V, keyof Parent | keyof ComponentOptions | "_tsx" >; export type PickProps> = Pick; export type PickOwnProps< V extends Parent, Parent extends Vue, Names extends PropNameCandidates > = Pick; export type AutoProps = Pick< V, PropNameCandidates >; export type MakeOptional = Omit & Partial>;