declare namespace JSX {

  //////////////////////////////////////////////////////////////////////////////

  // virtual element
  type Element = import('ssrsxjsx/jsx-runtime').VirtualElement;

  // style props
  type CssProps = import('./src/hooks/styleToString/cssTypes').CssProps;

  // child nodes
  type Children = import('ssrsxjsx/jsx-runtime').VirtualChildren;

  // ext contexts
  type SsrsxContext = import('ssrsxjsx/jsx-parser').SsrsxContext;

  //////////////////////////////////////////////////////////////////////////////

  interface ElementChildrenAttribute {
    children: Children;
  }

  //////////////////////////////////////////////////////////////////////////////

  interface IntrinsicElements {
    [elementName: string]: {
      style?: string | CssProps;
      className?: string | string[] | {[name: string]: boolean};
      [key:string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any
    }
  }

  //////////////////////////////////////////////////////////////////////////////

  interface IntrinsicAttributes {
    key?: string | number;
  }

  //////////////////////////////////////////////////////////////////////////////
}
