/**
 * Flowtype definitions for index
 * Generated by Flowgen from a Typescript Definition
 * Flowgen v1.10.0
 */

import * as React from "react";
import * as ReactNative from "react-native";
import { GestureResponderEvent } from "react-native";
export type NumberProp = string | number;
export type NumberArray = NumberProp[] | NumberProp;
export type FillRule = "evenodd" | "nonzero";
export type Units = "userSpaceOnUse" | "objectBoundingBox";
export type TextAnchor = "start" | "middle" | "end";
export type FontStyle = "normal" | "italic" | "oblique";
export type FontVariant = "normal" | "small-caps";
export type FontWeight =
  | NumberProp
  | "normal"
  | "bold"
  | "bolder"
  | "lighter"
  | "100"
  | "200"
  | "300"
  | "400"
  | "500"
  | "600"
  | "700"
  | "800"
  | "900";
export type FontStretch =
  | "normal"
  | "wider"
  | "narrower"
  | "ultra-condensed"
  | "extra-condensed"
  | "condensed"
  | "semi-condensed"
  | "semi-expanded"
  | "expanded"
  | "extra-expanded"
  | "ultra-expanded";
export type TextDecoration =
  | "none"
  | "underline"
  | "overline"
  | "line-through"
  | "blink";
export type FontVariantLigatures = "normal" | "none";
export type AlignmentBaseline =
  | "baseline"
  | "text-bottom"
  | "alphabetic"
  | "ideographic"
  | "middle"
  | "central"
  | "mathematical"
  | "text-top"
  | "bottom"
  | "center"
  | "top"
  | "text-before-edge"
  | "text-after-edge"
  | "before-edge"
  | "after-edge"
  | "hanging";
export type BaselineShift =
  | "sub"
  | "super"
  | "baseline"
  | $ReadOnlyArray<NumberProp>
  | NumberProp;
export type LengthAdjust = "spacing" | "spacingAndGlyphs";
export type TextPathMethod = "align" | "stretch";
export type TextPathSpacing = "auto" | "exact";
export type TextPathMidLine = "sharp" | "smooth";
export type Linecap = "butt" | "square" | "round";
export type Linejoin = "miter" | "bevel" | "round";
export interface TouchableProps {
  disabled?: boolean;
  onPress?: (event: GestureResponderEvent) => void;
  onPressIn?: (event: GestureResponderEvent) => void;
  onPressOut?: (event: GestureResponderEvent) => void;
  onLongPress?: (event: GestureResponderEvent) => void;
  delayPressIn?: number;
  delayPressOut?: number;
  delayLongPress?: number;
}
export type ResponderProps = {
  pointerEvents?: "box-none" | "none" | "box-only" | "auto",
  ...
} & ReactNative.GestureResponderHandlers;
export type rgbaArray = $ReadOnlyArray<number>;
export type int32ARGBColor = number;
export type Color = int32ARGBColor | rgbaArray | string;
export interface FillProps {
  fill?: Color;
  fillOpacity?: NumberProp;
  fillRule?: FillRule;
}
export interface ClipProps {
  clipRule?: FillRule;
  clipPath?: string;
}
export interface VectorEffectProps {
  vectorEffect?:
    | "none"
    | "non-scaling-stroke"
    | "nonScalingStroke"
    | "default"
    | "inherit"
    | "uri";
}
export interface DefinitionProps {
  id?: string;
}
export interface StrokeProps {
  stroke?: Color;
  strokeWidth?: NumberProp;
  strokeOpacity?: NumberProp;
  strokeDasharray?: $ReadOnlyArray<NumberProp> | NumberProp;
  strokeDashoffset?: NumberProp;
  strokeLinecap?: Linecap;
  strokeLinejoin?: Linejoin;
  strokeMiterlimit?: NumberProp;
}
export interface FontObject {
  fontStyle?: FontStyle;
  fontVariant?: FontVariant;
  fontWeight?: FontWeight;
  fontStretch?: FontStretch;
  fontSize?: NumberProp;
  fontFamily?: string;
  textAnchor?: TextAnchor;
  textDecoration?: TextDecoration;
  letterSpacing?: NumberProp;
  wordSpacing?: NumberProp;
  kerning?: NumberProp;
  fontFeatureSettings?: string;
  fontVariantLigatures?: FontVariantLigatures;
  fontVariationSettings?: string;
}
export type FontProps = {
  font?: FontObject,
  ...
} & FontObject;
export interface TransformObject {
  translate?: NumberArray;
  translateX?: NumberProp;
  translateY?: NumberProp;
  origin?: NumberArray;
  originX?: NumberProp;
  originY?: NumberProp;
  scale?: NumberArray;
  scaleX?: NumberProp;
  scaleY?: NumberProp;
  skew?: NumberArray;
  skewX?: NumberProp;
  skewY?: NumberProp;
  rotation?: NumberProp;
  x?: NumberArray;
  y?: NumberArray;
}
export type ColumnMajorTransformMatrix = [
  number,
  number,
  number,
  number,
  number,
  number
];
export type TransformProps = {
  transform?: ColumnMajorTransformMatrix | string | TransformObject,
  ...
} & TransformObject;
export interface CommonMaskProps {
  mask?: string;
}
export interface CommonMarkerProps {
  marker?: string;
  markerStart?: string;
  markerMid?: string;
  markerEnd?: string;
}
export type CommonPathProps = { ... } & FillProps &
  StrokeProps &
  ClipProps &
  TransformProps &
  VectorEffectProps &
  ResponderProps &
  TouchableProps &
  DefinitionProps &
  CommonMarkerProps &
  CommonMaskProps;
export type CircleProps = {
  cx?: NumberProp,
  cy?: NumberProp,
  opacity?: NumberProp,
  r?: NumberProp,
  ...
} & CommonPathProps;
declare export var Circle: React.ComponentClass<CircleProps>;
export interface ClipPathProps {
  id?: string;
}
declare export var ClipPath: React.ComponentClass<ClipPathProps>;
declare export var Defs: React.ComponentClass<{ ... }>;
export type EllipseProps = {
  cx?: NumberProp,
  cy?: NumberProp,
  opacity?: NumberProp,
  rx?: NumberProp,
  ry?: NumberProp,
  ...
} & CommonPathProps;
declare export var Ellipse: React.ComponentClass<EllipseProps>;
export type GProps = {
  opacity?: NumberProp,
  ...
} & CommonPathProps;
declare export var G: React.ComponentClass<GProps>;
export interface ForeignObjectProps {
  x?: NumberProp;
  y?: NumberProp;
  width?: NumberProp;
  height?: NumberProp;
}
declare export var ForeignObject: React.ComponentClass<ForeignObjectProps>;
export type ImageProps = {
  x?: NumberProp,
  y?: NumberProp,
  width?: NumberProp,
  height?: NumberProp,
  xlinkHref?: $PropertyType<ReactNative.ImageProps, "source">,
  href?: $PropertyType<ReactNative.ImageProps, "source">,
  preserveAspectRatio?: string,
  opacity?: NumberProp,
  clipPath?: string,
  id?: string,
  ...
} & ResponderProps &
  CommonMaskProps &
  ClipProps &
  TouchableProps;
declare export var Image: React.ComponentClass<ImageProps>;
export type LineProps = {
  opacity?: NumberProp,
  x1?: NumberProp,
  x2?: NumberProp,
  y1?: NumberProp,
  y2?: NumberProp,
  ...
} & CommonPathProps;
declare export var Line: React.ComponentClass<LineProps>;
export interface LinearGradientProps {
  x1?: NumberProp;
  x2?: NumberProp;
  y1?: NumberProp;
  y2?: NumberProp;
  gradientUnits?: Units;
  gradientTransform?: ColumnMajorTransformMatrix | string;
  id?: string;
}
declare export var LinearGradient: React.ComponentClass<LinearGradientProps>;
export type PathProps = {
  d?: string,
  opacity?: NumberProp,
  ...
} & CommonPathProps;
declare export var Path: React.ComponentClass<PathProps>;
export interface PatternProps {
  id?: string;
  x?: NumberProp;
  y?: NumberProp;
  width?: NumberProp;
  height?: NumberProp;
  patternTransform?: ColumnMajorTransformMatrix | string;
  patternUnits?: Units;
  patternContentUnits?: Units;
  viewBox?: string;
  preserveAspectRatio?: string;
}
declare export var Pattern: React.ComponentClass<PatternProps>;
export type PolygonProps = {
  opacity?: NumberProp,
  points?: string | $ReadOnlyArray<NumberProp>,
  ...
} & CommonPathProps;
declare export var Polygon: React.ComponentClass<PolygonProps>;
export type PolylineProps = {
  opacity?: NumberProp,
  points?: string | $ReadOnlyArray<NumberProp>,
  ...
} & CommonPathProps;
declare export var Polyline: React.ComponentClass<PolylineProps>;
export interface RadialGradientProps {
  fx?: NumberProp;
  fy?: NumberProp;
  rx?: NumberProp;
  ry?: NumberProp;
  cx?: NumberProp;
  cy?: NumberProp;
  r?: NumberProp;
  gradientUnits?: Units;
  gradientTransform?: ColumnMajorTransformMatrix | string;
  id?: string;
}
declare export var RadialGradient: React.ComponentClass<RadialGradientProps>;
export type RectProps = {
  x?: NumberProp,
  y?: NumberProp,
  width?: NumberProp,
  height?: NumberProp,
  rx?: NumberProp,
  ry?: NumberProp,
  opacity?: NumberProp,
  ...
} & CommonPathProps;
declare export var Rect: React.ComponentClass<RectProps>;
export interface StopProps {
  stopColor?: Color;
  stopOpacity?: NumberProp;
  offset?: NumberProp;
}
declare export var Stop: React.ComponentClass<StopProps>;
export type SvgProps = {
  width?: NumberProp,
  height?: NumberProp,
  viewBox?: string,
  preserveAspectRatio?: string,
  color?: Color,
  title?: string,
  ...
} & GProps &
  ReactNative.ViewProperties;
declare export var Svg: React.ComponentClass<SvgProps>;
declare export default typeof Svg;
export interface SymbolProps {
  id?: string;
  viewBox?: string;
  preserveAspectRatio?: string;
  opacity?: NumberProp;
}
declare export var Symbol: React.ComponentClass<SymbolProps>;
export type TSpanProps = {
  x?: NumberArray,
  y?: NumberArray,
  dx?: NumberArray,
  dy?: NumberArray,
  rotate?: NumberArray,
  inlineSize?: NumberProp,
  ...
} & CommonPathProps &
  FontProps;
declare export var TSpan: React.ComponentClass<TSpanProps>;
export type TextSpecificProps = {
  alignmentBaseline?: AlignmentBaseline,
  baselineShift?: BaselineShift,
  verticalAlign?: NumberProp,
  lengthAdjust?: LengthAdjust,
  textLength?: NumberProp,
  fontData?: null | {
    [name: string]: mixed,
    ...
  },
  fontFeatureSettings?: string,
  ...
} & CommonPathProps &
  FontProps;
export type TextProps = {
  x?: NumberArray,
  y?: NumberArray,
  dx?: NumberArray,
  dy?: NumberArray,
  rotate?: NumberArray,
  opacity?: NumberProp,
  inlineSize?: NumberProp,
  ...
} & TextSpecificProps;
declare export var Text: React.ComponentClass<TextProps>;
export type TextPathProps = {
  xlinkHref?: string,
  href?: string,
  startOffset?: NumberProp,
  method?: TextPathMethod,
  spacing?: TextPathSpacing,
  midLine?: TextPathMidLine,
  ...
} & TextSpecificProps;
declare export var TextPath: React.ComponentClass<TextPathProps>;
export type UseProps = {
  xlinkHref?: string,
  href?: string,
  width?: NumberProp,
  height?: NumberProp,
  x?: NumberProp,
  y?: NumberProp,
  opacity?: NumberProp,
  ...
} & CommonPathProps;
declare export var Use: React.ComponentClass<UseProps>;
declare export var EMaskUnits: {|
  +USER_SPACE_ON_USE: "userSpaceOnUse", // "userSpaceOnUse"
  +OBJECT_BOUNDING_BOX: "objectBoundingBox" // "objectBoundingBox"
|};
export type TMaskUnits =
  | typeof EMaskUnits.USER_SPACE_ON_USE
  | typeof EMaskUnits.OBJECT_BOUNDING_BOX;
export type MaskProps = {
  id?: string,
  x?: NumberProp,
  y?: NumberProp,
  width?: NumberProp,
  height?: NumberProp,
  maskTransform?: ColumnMajorTransformMatrix | string,
  maskUnits?: TMaskUnits,
  maskContentUnits?: TMaskUnits,
  ...
} & CommonPathProps;
declare export var Mask: React.ComponentClass<MaskProps>;
declare export var MarkerUnits: {|
  +STROKE_WIDTH: "strokeWidth", // "strokeWidth"
  +USER_SPACE_ON_USE: "userSpaceOnUse" // "userSpaceOnUse"
|};

declare export var Orient: {|
  +AUTO: "auto", // "auto"
  +AUTO_START_REVERSE: "auto-start-reverse" // "auto-start-reverse"
|};
export interface MarkerProps {
  id?: string;
  viewBox?: string;
  preserveAspectRatio?: string;
  refX?: NumberProp;
  refY?: NumberProp;
  markerWidth?: NumberProp;
  markerHeight?: NumberProp;
  markerUnits?: $Values<typeof MarkerUnits>;
  orient?: $Values<typeof Orient> | NumberProp;
}
declare export var Marker: React.ComponentClass<MarkerProps>;
export type Styles = {
  [property: string]: string,
  ...
};
export interface AST {
  tag: string;
  style?: Styles;
  styles?: string;
  priority?: Map<string, boolean | void>;
  parent: AST | null;
  children: (AST | string)[] | (JSX.Element | string)[];
  props: {
    [prop: string]: Styles | string | void,
    ...
  };
  Tag: React.ComponentType;
}
export type XmlAST = {
  children: (XmlAST | string)[],
  parent: XmlAST | null,
  ...
} & AST;
export type JsxAST = {
  children: (JSX.Element | string)[],
  ...
} & AST;
export type UriProps = {
  uri: string | null,
  override?: SvgProps,
  ...
} & SvgProps;
export type UriState = {
  xml: string | null,
  ...
};
export type XmlProps = {
  xml: string | null,
  override?: SvgProps,
  ...
} & SvgProps;
export type XmlState = {
  ast: JsxAST | null,
  ...
};
export type AstProps = {
  ast: JsxAST | null,
  override?: SvgProps,
  ...
} & SvgProps;
export type Middleware = (ast: XmlAST) => XmlAST;
declare export function parse(
  source: string,
  middleware?: Middleware
): JsxAST | null;
declare export var SvgAst: React.FunctionComponent<AstProps>;
declare export var SvgXml: React.FunctionComponent<XmlProps>;
declare export var SvgFromXml: React.ComponentClass<XmlProps, XmlState>;
declare export var SvgUri: React.FunctionComponent<UriProps>;
declare export var SvgFromUri: React.ComponentClass<UriProps, UriState>;
declare export var SvgCss: React.FunctionComponent<XmlProps>;
declare export var SvgWithCss: React.ComponentClass<XmlProps, XmlState>;
declare export var SvgCssUri: React.FunctionComponent<UriProps>;
declare export var SvgWithCssUri: React.ComponentClass<UriProps, UriState>;
declare export var inlineStyles: Middleware;
