import { Properties as CSSProperties } from 'csstype'; export = goober; export as namespace goober; declare namespace goober { interface DefaultTheme {} type Theme = keyof T extends never ? T : { theme: T }; interface StyledFunction { // used when creating a styled component from a native HTML element ( tag: T, forwardRef?: ForwardRefFunction ): Tagged< JSX.LibraryManagedAttributes & P & Theme >; // used to extend other styled components. Inherits props from the extended component ( tag: StyledVNode, forwardRef?: ForwardRefFunction ): Tagged>; // used when creating a component from a string (html native) but using a non HTML standard // component, such as when you want to style web components

(tag: string): Tagged

>; // used to create a styled component from a JSX element (both functional and class-based) ( tag: T, forwardRef?: ForwardRefFunction ): Tagged

; } type ForwardRefFunction = { (props: any, ref: any): any; }; type ForwardPropsFunction = { (props: object): undefined; }; const styled: StyledFunction; function setup( val: T, prefixer?: (key: string, val: any) => string, theme?: Function, forwardProps?: ForwardPropsFunction ): void; function extractCss(): string; function glob( tag: CSSAttribute | TemplateStringsArray | string, ...props: Array ): void; function css( tag: CSSAttribute | TemplateStringsArray | string, ...props: Array ): string; function keyframes( tag: CSSAttribute | TemplateStringsArray | string, ...props: Array ): string; type StyledVNode = (props: T, ...args: any[]) => any; type Tagged

= ( tag: | CSSAttribute | CSSAttribute[] | TemplateStringsArray | string | ((props: P & PP) => CSSAttribute | string), ...props: Array< | string | number | ((props: P & PP) => CSSAttribute | string | number | false | undefined) > ) => StyledVNode>>; interface CSSAttribute extends CSSProperties { [key: string]: CSSAttribute | string | number | undefined; } }