import "Views.idl";

namespace RNSVG
{
  [experimental]
  interface IRenderableFabric
  {
    Microsoft.ReactNative.ComponentView SvgParent { get; };

    void UpdateProperties(Microsoft.ReactNative.IComponentProps props, Microsoft.ReactNative.IComponentProps oldProps, Boolean forceUpdate, Boolean invalidate);
  };

  [experimental]
  [default_interface]
  runtimeclass SvgView : Microsoft.ReactNative.Composition.ViewComponentView,
      Microsoft.ReactNative.Composition.Experimental.IInternalCreateVisual, IRenderable, IRenderableFabric, ISvgView
  {
    SvgView(Microsoft.ReactNative.Composition.CreateCompositionComponentViewArgs args);

    GroupView Group;
    Microsoft.ReactNative.Color CurrentColor{ get; };
  };

  [experimental]
  [default_interface]
  unsealed runtimeclass RenderableView : Microsoft.ReactNative.ComponentView, IRenderable, IRenderableFabric, IRenderableView
  {
    RenderableView(Microsoft.ReactNative.CreateComponentViewArgs args);
    SvgView SvgRoot{ get; };
    Microsoft.ReactNative.Color Fill{ get; };
    Microsoft.ReactNative.Color Stroke{ get; };
  };

  [experimental]
  [default_interface]
  runtimeclass RectView : RenderableView
  {
    RectView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass CircleView : RenderableView
  {
    CircleView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass EllipseView : RenderableView
  {
    EllipseView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass LineView : RenderableView
  {
    LineView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass PathView : RenderableView
  {
    PathView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass UseView : RenderableView
  {
    UseView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass ImageView : RenderableView
  {
    ImageView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  unsealed runtimeclass GroupView : RenderableView, IGroupView
  {
    GroupView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  unsealed runtimeclass TextView : GroupView, ITextView
  {
    TextView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass TSpanView : TextView, ITSpanView
  {
    TSpanView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass DefsView : GroupView
  {
    DefsView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass SymbolView : GroupView, ISymbolView
  {
    SymbolView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass ClipPathView : GroupView
  {
    ClipPathView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass MarkerView : GroupView
  {
    MarkerView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass MaskView : GroupView
  {
    MaskView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  unsealed runtimeclass BrushView : GroupView, IBrushView
  {
    BrushView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass LinearGradientView : BrushView
  {
    LinearGradientView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass RadialGradientView : BrushView
  {
    RadialGradientView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };

  [experimental]
  [default_interface]
  runtimeclass PatternView : BrushView
  {
    PatternView(Microsoft.ReactNative.CreateComponentViewArgs args);
  };
}