/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-namespace */
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { IAny } from '../interface/IAny'
import { BaseComponent } from './BaseComponent'
import { ReblendTyping, ReblendManagedAttributes, HTMLWebViewElement } from 'reblend-typing'

declare global {
  export namespace Reblend.JSX {
    type ElementType = string | ReblendTyping.JSXElementConstructor<any> | typeof BaseComponent<any, any>
    type Element = ReblendTyping.ReblendElement
    interface ElementClass<P = {}, S = {}> extends ReblendTyping.Component<P, S> {
      html?: () => Promise<ReblendTyping.ReblendNode> | ReblendTyping.ReblendNode
    }
    interface ElementAttributesProperty {
      props: { children: ReblendTyping.ReblendElement[] } & IAny
    }
    interface ElementChildrenAttribute {
      children: { children: ReblendTyping.ReblendElement[] } & IAny
    }
    interface IntrinsicAttributes extends ReblendTyping.Attributes {}
    interface IntrinsicClassAttributes<T> extends ReblendTyping.ClassAttributes<T> {}
    interface IntrinsicElements {
      a: ReblendTyping.DetailedHTMLProps<ReblendTyping.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>
      abbr: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      address: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      area: ReblendTyping.DetailedHTMLProps<ReblendTyping.AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement>
      article: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      aside: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      audio: ReblendTyping.DetailedHTMLProps<ReblendTyping.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>
      b: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      base: ReblendTyping.DetailedHTMLProps<ReblendTyping.BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement>
      bdi: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      bdo: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      big: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      blockquote: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.BlockquoteHTMLAttributes<HTMLQuoteElement>,
        HTMLQuoteElement
      >
      body: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>
      br: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLBRElement>, HTMLBRElement>
      button: ReblendTyping.DetailedHTMLProps<ReblendTyping.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
      canvas: ReblendTyping.DetailedHTMLProps<ReblendTyping.CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>
      caption: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      center: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      cite: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      code: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      col: ReblendTyping.DetailedHTMLProps<ReblendTyping.ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>
      colgroup: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.ColgroupHTMLAttributes<HTMLTableColElement>,
        HTMLTableColElement
      >
      data: ReblendTyping.DetailedHTMLProps<ReblendTyping.DataHTMLAttributes<HTMLDataElement>, HTMLDataElement>
      datalist: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>
      dd: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      del: ReblendTyping.DetailedHTMLProps<ReblendTyping.DelHTMLAttributes<HTMLModElement>, HTMLModElement>
      details: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.DetailsHTMLAttributes<HTMLDetailsElement>,
        HTMLDetailsElement
      >
      dfn: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      dialog: ReblendTyping.DetailedHTMLProps<ReblendTyping.DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>
      div: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
      dl: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLDListElement>, HTMLDListElement>
      dt: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      em: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      embed: ReblendTyping.DetailedHTMLProps<ReblendTyping.EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement>
      fieldset: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.FieldsetHTMLAttributes<HTMLFieldSetElement>,
        HTMLFieldSetElement
      >
      figcaption: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      figure: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      footer: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      form: ReblendTyping.DetailedHTMLProps<ReblendTyping.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>
      h1: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
      h2: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
      h3: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
      h4: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
      h5: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
      h6: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
      head: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>
      header: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      hgroup: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      hr: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLHRElement>, HTMLHRElement>
      html: ReblendTyping.DetailedHTMLProps<ReblendTyping.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>
      i: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      iframe: ReblendTyping.DetailedHTMLProps<ReblendTyping.IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>
      img: ReblendTyping.DetailedHTMLProps<ReblendTyping.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>
      input: ReblendTyping.DetailedHTMLProps<ReblendTyping.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>
      ins: ReblendTyping.DetailedHTMLProps<ReblendTyping.InsHTMLAttributes<HTMLModElement>, HTMLModElement>
      kbd: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      keygen: ReblendTyping.DetailedHTMLProps<ReblendTyping.KeygenHTMLAttributes<HTMLElement>, HTMLElement>
      label: ReblendTyping.DetailedHTMLProps<ReblendTyping.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
      legend: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>
      li: ReblendTyping.DetailedHTMLProps<ReblendTyping.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>
      link: ReblendTyping.DetailedHTMLProps<ReblendTyping.LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>
      main: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      map: ReblendTyping.DetailedHTMLProps<ReblendTyping.MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>
      mark: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      menu: ReblendTyping.DetailedHTMLProps<ReblendTyping.MenuHTMLAttributes<HTMLElement>, HTMLElement>
      menuitem: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      meta: ReblendTyping.DetailedHTMLProps<ReblendTyping.MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>
      meter: ReblendTyping.DetailedHTMLProps<ReblendTyping.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>
      nav: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      noindex: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      noscript: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      object: ReblendTyping.DetailedHTMLProps<ReblendTyping.ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement>
      ol: ReblendTyping.DetailedHTMLProps<ReblendTyping.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>
      optgroup: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.OptgroupHTMLAttributes<HTMLOptGroupElement>,
        HTMLOptGroupElement
      >
      option: ReblendTyping.DetailedHTMLProps<ReblendTyping.OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement>
      output: ReblendTyping.DetailedHTMLProps<ReblendTyping.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>
      p: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>
      param: ReblendTyping.DetailedHTMLProps<ReblendTyping.ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement>
      picture: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      pre: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLPreElement>, HTMLPreElement>
      progress: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.ProgressHTMLAttributes<HTMLProgressElement>,
        HTMLProgressElement
      >
      q: ReblendTyping.DetailedHTMLProps<ReblendTyping.QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>
      rp: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      rt: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      ruby: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      s: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      samp: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      search: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      slot: ReblendTyping.DetailedHTMLProps<ReblendTyping.SlotHTMLAttributes<HTMLSlotElement>, HTMLSlotElement>
      script: ReblendTyping.DetailedHTMLProps<ReblendTyping.ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement>
      section: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      select: ReblendTyping.DetailedHTMLProps<ReblendTyping.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>
      small: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      source: ReblendTyping.DetailedHTMLProps<ReblendTyping.SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement>
      span: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>
      strong: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      style: ReblendTyping.DetailedHTMLProps<ReblendTyping.StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement>
      sub: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      summary: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      sup: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      table: ReblendTyping.DetailedHTMLProps<ReblendTyping.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>
      template: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement>
      tbody: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.HTMLAttributes<HTMLTableSectionElement>,
        HTMLTableSectionElement
      >
      td: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.TdHTMLAttributes<HTMLTableDataCellElement>,
        HTMLTableDataCellElement
      >
      textarea: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.TextareaHTMLAttributes<HTMLTextAreaElement>,
        HTMLTextAreaElement
      >
      tfoot: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.HTMLAttributes<HTMLTableSectionElement>,
        HTMLTableSectionElement
      >
      th: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.ThHTMLAttributes<HTMLTableHeaderCellElement>,
        HTMLTableHeaderCellElement
      >
      thead: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.HTMLAttributes<HTMLTableSectionElement>,
        HTMLTableSectionElement
      >
      time: ReblendTyping.DetailedHTMLProps<ReblendTyping.TimeHTMLAttributes<HTMLTimeElement>, HTMLTimeElement>
      title: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>
      tr: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>
      track: ReblendTyping.DetailedHTMLProps<ReblendTyping.TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement>
      u: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      ul: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLUListElement>, HTMLUListElement>
      var: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      video: ReblendTyping.DetailedHTMLProps<ReblendTyping.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>
      wbr: ReblendTyping.DetailedHTMLProps<ReblendTyping.HTMLAttributes<HTMLElement>, HTMLElement>
      webview: ReblendTyping.DetailedHTMLProps<
        ReblendTyping.WebViewHTMLAttributes<HTMLWebViewElement>,
        HTMLWebViewElement
      >
      svg: ReblendTyping.SVGProps<SVGSVGElement>
      animate: ReblendTyping.SVGProps<SVGElement>
      animateMotion: ReblendTyping.SVGProps<SVGElement>
      animateTransform: ReblendTyping.SVGProps<SVGElement>
      circle: ReblendTyping.SVGProps<SVGCircleElement>
      clipPath: ReblendTyping.SVGProps<SVGClipPathElement>
      defs: ReblendTyping.SVGProps<SVGDefsElement>
      desc: ReblendTyping.SVGProps<SVGDescElement>
      ellipse: ReblendTyping.SVGProps<SVGEllipseElement>
      feBlend: ReblendTyping.SVGProps<SVGFEBlendElement>
      feColorMatrix: ReblendTyping.SVGProps<SVGFEColorMatrixElement>
      feComponentTransfer: ReblendTyping.SVGProps<SVGFEComponentTransferElement>
      feComposite: ReblendTyping.SVGProps<SVGFECompositeElement>
      feConvolveMatrix: ReblendTyping.SVGProps<SVGFEConvolveMatrixElement>
      feDiffuseLighting: ReblendTyping.SVGProps<SVGFEDiffuseLightingElement>
      feDisplacementMap: ReblendTyping.SVGProps<SVGFEDisplacementMapElement>
      feDistantLight: ReblendTyping.SVGProps<SVGFEDistantLightElement>
      feDropShadow: ReblendTyping.SVGProps<SVGFEDropShadowElement>
      feFlood: ReblendTyping.SVGProps<SVGFEFloodElement>
      feFuncA: ReblendTyping.SVGProps<SVGFEFuncAElement>
      feFuncB: ReblendTyping.SVGProps<SVGFEFuncBElement>
      feFuncG: ReblendTyping.SVGProps<SVGFEFuncGElement>
      feFuncR: ReblendTyping.SVGProps<SVGFEFuncRElement>
      feGaussianBlur: ReblendTyping.SVGProps<SVGFEGaussianBlurElement>
      feImage: ReblendTyping.SVGProps<SVGFEImageElement>
      feMerge: ReblendTyping.SVGProps<SVGFEMergeElement>
      feMergeNode: ReblendTyping.SVGProps<SVGFEMergeNodeElement>
      feMorphology: ReblendTyping.SVGProps<SVGFEMorphologyElement>
      feOffset: ReblendTyping.SVGProps<SVGFEOffsetElement>
      fePointLight: ReblendTyping.SVGProps<SVGFEPointLightElement>
      feSpecularLighting: ReblendTyping.SVGProps<SVGFESpecularLightingElement>
      feSpotLight: ReblendTyping.SVGProps<SVGFESpotLightElement>
      feTile: ReblendTyping.SVGProps<SVGFETileElement>
      feTurbulence: ReblendTyping.SVGProps<SVGFETurbulenceElement>
      filter: ReblendTyping.SVGProps<SVGFilterElement>
      foreignObject: ReblendTyping.SVGProps<SVGForeignObjectElement>
      g: ReblendTyping.SVGProps<SVGGElement>
      image: ReblendTyping.SVGProps<SVGImageElement>
      line: ReblendTyping.SVGLineElementAttributes<SVGLineElement>
      linearGradient: ReblendTyping.SVGProps<SVGLinearGradientElement>
      marker: ReblendTyping.SVGProps<SVGMarkerElement>
      mask: ReblendTyping.SVGProps<SVGMaskElement>
      metadata: ReblendTyping.SVGProps<SVGMetadataElement>
      mpath: ReblendTyping.SVGProps<SVGElement>
      path: ReblendTyping.SVGProps<SVGPathElement>
      pattern: ReblendTyping.SVGProps<SVGPatternElement>
      polygon: ReblendTyping.SVGProps<SVGPolygonElement>
      polyline: ReblendTyping.SVGProps<SVGPolylineElement>
      radialGradient: ReblendTyping.SVGProps<SVGRadialGradientElement>
      rect: ReblendTyping.SVGProps<SVGRectElement>
      set: ReblendTyping.SVGProps<SVGSetElement>
      stop: ReblendTyping.SVGProps<SVGStopElement>
      switch: ReblendTyping.SVGProps<SVGSwitchElement>
      symbol: ReblendTyping.SVGProps<SVGSymbolElement>
      text: ReblendTyping.SVGTextElementAttributes<SVGTextElement>
      textPath: ReblendTyping.SVGProps<SVGTextPathElement>
      tspan: ReblendTyping.SVGProps<SVGTSpanElement>
      use: ReblendTyping.SVGProps<SVGUseElement>
      view: ReblendTyping.SVGProps<SVGViewElement>
    }
  }
}

// eslint-disable-next-line @typescript-eslint/ban-types
class Reblend<P = {}, S = {}> extends BaseComponent<P, S> {
  static ELEMENT_NAME = 'Fragment'

  constructor() {
    super()
  }

  async html() {
    return this?.props?.children
  }
}

export { Reblend }
