/**
 * Flowtype definitions for index
 * Generated by Flowgen from a Typescript Definition
 * Flowgen v1.17.0
 * @flow
 */
import type { Node } from 'react';
import type { CssType, CssFunction } from '../types';
export type ObjectInterpolation<TProps> = CssType<TProps> | CssType<TProps>[];
export type TemplateStringsInterpolation<TProps> = CssFunction<TProps> | CssFunction<TProps>[];
declare interface CssSignature<TProps> {
  (...interpolations: ObjectInterpolation<TProps>[]): string;
  (
    template: $ReadOnlyArray<string>,
    ...interpolations: TemplateStringsInterpolation<TProps>[]
  ): string;
}
export interface ClassNamesProps<TProps> {
  children: (opts: {
    css: CssSignature<TProps>,
    style: $Shape<CSSStyleDeclaration>,
    ...
  }) => Node;
}
/**
 * ## Class names
 *
 * Use a component where styles are not necessarily used on a JSX element.
 * For further details [read the documentation](https://compiledcssinjs.com/docs/api-class-names).
 *
 * ### Style with objects
 * @example ```
 * <ClassNames>
 *   {({ css, style }) => children({ className: css({ fontSize: 12 }) })}
 * </ClassNames>
 * ```
 *
 * ### Style with template literals
 * @example ```
 * <ClassNames>
 *   {({ css, style }) => children({ className: css`font-size: 12px;` })}
 * </ClassNames>
 * ```
 *
 * ### Compose styles with arrays
 * @example ```
 * <ClassNames>
 *   {({ css, style }) =>
 *    children({ className: css([{ fontSize: 12 }, css`font-size: 12px`]) })}
 * </ClassNames>
 * ```
 */
declare export function ClassNames<TProps>(x: ClassNamesProps<TProps>): React$Node;
declare export {};
