
export declare function shadow (element: WebComponent, mode?: string): any
export declare function html (strings: Array<string>, ...keys: any[]): string
export declare function define (tag: string, Class: typeof WebComponent): void

export declare class WebComponent extends HTMLElement {
  state: object
  context: object
  data: object
  #contextMap: object
  #dataMap: object

  constructor ()

  connectedCallback (): void

  disconnectedCallback (): void

  attributeChangedCallback (name: any, oldValue: any, newValue: any): void

  isCustomElement (element: Element): boolean

  #updateBindings (prop: any, value: any): void

  setContext (newContext: object): this
  getContext (key: string): any
  useContext (key: string, callback: (el: any, key: string) => any): this

  setData (newData: object): this
  getData (key: string): any
  useData (key: string, callback: (el: any, key: string) => any): this

  setState (newState: object): this
  getState (key: string): any

  stateIs (key: string, value: any): boolean

  #mapBindKey (key: string, obj: object): Array<string>

  isArray (arr: any): boolean

  isObject (obj: any): boolean

  isNodeList (obj: any): boolean

  get (attribute: string, childSelector: any): string|null

  query (selector: string): WebComponent|Element|null

  queryAll (selector: string): NodeListOf<any>

  show (els: NodeListOf<any>|Array<any>|any): void

  hide (els: NodeListOf<any>|Array<any>|any): void

  setStyle (els: NodeListOf<any>|Array<any>|any, styles: object): void

  setClassList (els: NodeListOf<any>|Array<any>|any, ...classes: Array<string>): void

  removeClassList (els: NodeListOf<any>|Array<any>|any, ...classes: Array<string>): void

  addTemplate (element: any, selector: string, replaceContents: boolean): void
}
