mostly-dom
Version:
A virtual-dom for TypeScript
57 lines (56 loc) • 1.74 kB
TypeScript
import * as hooks from './hooks';
import { CSSProperties } from './CSS';
import { ElementProperties } from './HtmlProperties';
import { VNodeEvents } from './VNodeEventTypes';
export interface VNode<T extends Node = any, Props = any> {
tagName: string | undefined;
props: Props;
children: Array<VNode> | undefined;
text: string | undefined;
key: string | number | undefined;
element: T | undefined;
namespace: string | undefined;
scope: string | undefined;
parent: VNode<Element> | undefined;
}
export interface ElementVNode<T extends Element = Element, Props = any> extends VNode<T, Props> {
tagName: string;
element: T;
namespace: string;
text: undefined;
}
export interface TextVNode extends VNode<Text> {
tagName: undefined;
children: undefined;
text: string;
key: undefined;
element: Text;
namespace: undefined;
scope: undefined;
}
export interface VNodeProps<T extends Element = Element, EventMap extends VNodeEvents<T, ElementEventMap> = VNodeEvents<T, ElementEventMap>> extends ElementProperties {
key?: string | number;
class?: {
[className: string]: Boolean;
};
attrs?: {
[attributeName: string]: any;
};
style?: VNodeStyle;
on?: EventMap;
listener?: EventListener;
focus?: boolean;
scope?: string;
init?: hooks.InitHook;
create?: hooks.CreateHook<T>;
update?: hooks.UpdateHook<T>;
insert?: hooks.InsertHook<T>;
remove?: hooks.RemoveHook<T>;
destroy?: hooks.DestroyHook<T>;
prepatch?: hooks.PrepatchHook<T>;
postpatch?: hooks.PostpatchHook<T>;
}
export interface VNodeStyle extends CSSProperties {
delayed?: CSSProperties;
remove?: CSSProperties;
}