/* eslint-disable max-classes-per-file */
import { ComponentPublicInstance } from 'vue';
import { config, VueWrapper, DOMWrapper } from '@vue/test-utils';

declare module '@vue/test-utils' {
  // eslint-disable-next-line
  export class DOMWrapper<ElementType extends Element> {
    style: CSSStyleDeclaration;
  }

  // eslint-disable-next-line
  class VueWrapper<T extends ComponentPublicInstance> {
    style: CSSStyleDeclaration;
  }
}

const stylePlugin = (
  wrapper: VueWrapper<ComponentPublicInstance> | DOMWrapper<Element>
) => {
  return {
    style: (wrapper.element as HTMLElement).style,
  };
};

config.plugins.DOMWrapper.install(stylePlugin);
config.plugins.VueWrapper.install(stylePlugin);