/**
 * Flowtype definitions for index
 * Generated by Flowgen from a Typescript Definition
 * Flowgen v1.17.0
 * @flow
 */
import type { ComponentType } from 'react';
import type { CssType, CssFunction } from '../types';
/**
 * Extra props added to the output Styled Component.
 */
export type StyledProps = {
  as?: $Keys<$JSXIntrinsics>,
};
export type ObjectInterpolation<TProps> = CssType<TProps> | CssType<TProps>[];
export type TemplateStringsInterpolation<TProps> = CssFunction<TProps> | CssFunction<TProps>[];
export interface StyledComponent<ComponentProps: mixed> {
  <TProps>(
    ...css: ObjectInterpolation<TProps>[]
  ): React$ComponentType<{ ...TProps, ...ComponentProps, ...StyledProps }>;
  <TProps>(
    template: $ReadOnlyArray<string>,
    ...interpolations: TemplateStringsInterpolation<TProps>[]
  ): React$ComponentType<{ ...TProps, ...ComponentProps, ...StyledProps }>;
}
export type StyledComponentMap = $ObjMapi<$JSXIntrinsics, <Tag>(Tag) => StyledComponent<mixed>>;
export type CreateStyledComponent = {
  <TInheritedProps: mixed>(
    Component: ComponentType<TInheritedProps>
  ): StyledComponent<TInheritedProps>,
  ...
} & StyledComponentMap;
/**
 * ## Styled component
 *
 * Create a component that styles a JSX element which comes with built-in behavior such as `ref` and `as` prop support.
 * For further details [read the documentation](https://compiledcssinjs.com/docs/api-styled).
 *
 * ### Style with objects
 * @example ```
 * styled.div({
 *   fontSize: 12,
 * });
 * ```
 *
 * ### Style with template literals
 * @example ```
 * styled.div`
 *   font-size: 12px
 * `;
 * ```
 *
 * ### Compose styles with arrays
 * @example ```
 * import type { css } from '@evensix-compiled/react';
 *
 * styled.div([
 *   { fontSize: 12 },
 *   css`font-size: 12px;`
 * ]);
 *
 * styled.div(
 *   { fontSize: 12 },
 *   css`font-size: 12px`
 * );
 * ```
 */
declare export var styled: CreateStyledComponent;
