glamorous
Version:
React component styling solved
65 lines (54 loc) • 1.62 kB
TypeScript
import { CSSProperties } from './css-properties'
import { Component } from './glamorous'
import { Omit } from './helpers'
/**
* `glamorousComponentFactory` returns a ComponentClass
*
* @see {@link https://github.com/paypal/glamorous/blob/master/src/create-glamorous.js#L28-L131}
*/
export interface ExtraGlamorousProps {
/**
* Called with the inner element's reference
*/
innerRef?: (instance: any) => void;
className?: string;
/**
* Same type as any of the styles provided, will be merged with this component's styles and take highest priority over the component's predefined styles
*/
css?: CSSProperties;
theme?: object;
}
export interface GlamorousComponentFunctions<ExternalProps, Props> {
/**
* Copies the styles of an already created glamorous component with a different tag
*/
withComponent: (
component: string | Component<Props>
) => GlamorousComponent<
ExternalProps,
Props
>
/**
* Applies props by default for a component
*/
withProps: <DefaultProps extends object>(
props: DefaultProps
) => GlamorousComponent<
ExternalProps & Partial<DefaultProps>,
Props
>
}
export interface GlamorousComponent<ExternalProps, Props> extends
React.ComponentClass<ExternalProps & ExtraGlamorousProps>,
GlamorousComponentFunctions<ExternalProps, Props>
{}
export type GlamorousComponentProps<ExternalProps> =
& JSX.IntrinsicAttributes
& JSX.IntrinsicClassAttributes<
React.Component<
ExtraGlamorousProps & ExternalProps,
React.ComponentState
>
>
& ExternalProps
& { children?: React.ReactNode }