all files / src/types/ VirtualNode.ts

100% Statements 0/0
100% Branches 0/0
100% Functions 0/0
100% Lines 0/0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79                                                                                                                                                             
import * as hooks from './hooks'
 
import { CSSProperties } from './CSS'
import { ElementProperties } from './HtmlProperties'
import { VNodeEvents } from './VNodeEventTypes'
import { HyperscriptChildren } from '../index'
 
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
}
 
// tslint:disable-next-line:max-line-length
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 for dom diffing
  key?: string | number
 
  // classes
  class?: { [className: string]: Boolean }
 
  // attributes for setAttribute()
  attrs?: { [attributeName: string]: any }
 
  // styling
  style?: VNodeStyle
 
  // events
  on?: EventMap
  listener?: EventListener
 
  // declarative focusing
  focus?: boolean
 
  scope?: string
 
  // hooks
  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
}