Skip to content

Instantly share code, notes, and snippets.

@kalley
Last active September 27, 2017 21:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kalley/22859a23a70e5800d47e3cdd43ad4fbc to your computer and use it in GitHub Desktop.
Save kalley/22859a23a70e5800d47e3cdd43ad4fbc to your computer and use it in GitHub Desktop.
styled-components libdef that actually checks props and defaultProps
// @flow
type $npm$styledComponents$ComponentWithDefaultProps<
DefaultProps: {},
Props: {}
> = React$ComponentType<Props> & { defaultProps: DefaultProps }
type $npm$styledComponents$Interpolation =
| (<C: {}>(executionContext: C) => $npm$styledComponents$Interpolation)
| string
| number
| Array<$npm$styledComponents$Interpolation>
type $npm$styledComponents$NameGenerator = (hash: number) => string
type $npm$styledComponents$RuleSet = Array<$npm$styledComponents$Interpolation>
type $npm$styledComponents$Theme = { [key: string]: mixed }
type $npm$styledComponents$ThemeProviderProps = {
theme:
| $npm$styledComponents$Theme
| ((outerTheme: $npm$styledComponents$Theme) => void),
}
class Npm$StyledComponents$ThemeProvider extends React$Component<
$npm$styledComponents$ThemeProviderProps
> {}
class Npm$StyledComponents$StyleSheetManager extends React$Component<{
sheet: mixed,
}> {}
class Npm$StyledComponents$StyleSheet {}
class Npm$StyledComponents$ServerStyleSheet {
instance: Npm$StyledComponents$StyleSheet
collectStyles: (children: React$Node) => React$Node
getStyleTags: () => string
getStyleElement: () => React$Node
}
class Npm$styledComponents$StyledComponent<
DefaultProps,
Props,
Keys
> extends React$Component<Props> {
static defaultProps: DefaultProps
static withComponent: (<P, D>(
$npm$styledComponents$ComponentWithDefaultProps<D, P>
) => Class<Npm$styledComponents$StyledComponent<D, P, Keys>>) &
(<P>(
Keys | React$ComponentType<P>
) => Class<Npm$styledComponents$StyledComponent<{}, P, Keys>>)
static extend: $npm$styledComponents$TaggedLiteral<Props, DefaultProps>
static attrs: <AdditionalProps: {}>(
attrs: AdditionalProps
) => $npm$styledComponents$TaggedLiteral<
Props & AdditionalProps,
DefaultProps
>
}
type $npm$styledComponents$TaggedTemplateLiteral<R> = (
strings: Array<string>,
...interpolations: Array<$npm$styledComponents$Interpolation>
) => R
declare type $npm$styledComponents$TaggedLiteral<
P,
D = {},
Keys = void
> = $npm$styledComponents$TaggedTemplateLiteral<
Class<Npm$styledComponents$StyledComponent<D, P, Keys>>
>
type $npm$styledComponents$Styled<Keys> = (<P, D>(
$npm$styledComponents$ComponentWithDefaultProps<D, P>
) => $npm$styledComponents$TaggedLiteral<P, D, Keys>) &
(<P>(
Keys | React$ComponentType<P>
) => $npm$styledComponents$TaggedLiteral<P, {}, Keys>)
type $npm$styledComponents$WithTheme = (<P: {}, D>(
$npm$styledComponents$ComponentWithDefaultProps<
D,
{ theme: $npm$styledComponents$Theme } & P
>
) => React$ComponentType<$Diff<P, D>>) &
(<P>(
React$ComponentType<{ theme: $npm$styledComponents$Theme } & P>
) => React$ComponentType<P>)
type $npm$styledComponents$DOMElements<Keys> = {|
a: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
abbr: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
address: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
area: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
article: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
aside: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
audio: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
b: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
base: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
bdi: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
bdo: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
big: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
blockquote: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
body: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
br: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
button: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
canvas: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
caption: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
cite: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
code: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
col: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
colgroup: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
data: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
datalist: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
dd: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
del: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
details: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
dfn: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
dialog: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
div: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
dl: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
dt: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
em: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
embed: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
fieldset: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
figcaption: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
figure: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
footer: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
form: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
h1: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
h2: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
h3: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
h4: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
h5: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
h6: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
head: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
header: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
hgroup: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
hr: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
html: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
i: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
iframe: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
img: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
input: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ins: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
kbd: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
keygen: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
label: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
legend: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
li: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
link: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
main: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
map: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
mark: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
marquee: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
menu: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
menuitem: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
meta: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
meter: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
nav: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
noscript: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
object: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ol: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
optgroup: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
option: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
output: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
p: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
param: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
picture: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
pre: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
progress: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
q: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
rp: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
rt: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ruby: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
s: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
samp: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
script: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
section: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
select: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
small: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
source: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
span: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
strong: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
style: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
sub: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
summary: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
sup: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
table: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
tbody: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
td: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
textarea: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
tfoot: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
th: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
thead: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
time: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
title: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
tr: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
track: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
u: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ul: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
var: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
video: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
wbr: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
// SVG
circle: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
clipPath: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
defs: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ellipse: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
g: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
image: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
line: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
linearGradient: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
mask: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
path: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
pattern: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
polygon: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
polyline: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
radialGradient: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
rect: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
stop: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
svg: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
text: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
tspan: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
|}
declare module 'styled-components' {
declare type Interpolation = $npm$styledComponents$Interpolation
declare type NameGenerator = $npm$styledComponents$NameGenerator
declare type Theme = $npm$styledComponents$Theme
declare type ThemeProviderProps = $npm$styledComponents$ThemeProviderProps
declare type TaggedTemplateLiteral<
R
> = $npm$styledComponents$TaggedTemplateLiteral<R>
declare type StyledComponentsComponentListKeys = $Keys<
$npm$styledComponents$DOMElements<StyledComponentsComponentListKeys>
>
declare type StyledComponent<D, P> = Npm$styledComponents$StyledComponent<
D,
P,
StyledComponentsComponentListKeys
>
declare module.exports: {
$call: $npm$styledComponents$Styled<StyledComponentsComponentListKeys>,
css: $npm$styledComponents$TaggedTemplateLiteral<
$npm$styledComponents$RuleSet
>,
injectGlobal: $npm$styledComponents$TaggedTemplateLiteral<void>,
keyframes: $npm$styledComponents$TaggedTemplateLiteral<string>,
withTheme: $npm$styledComponents$WithTheme,
ServerStyleSheet: typeof Npm$StyledComponents$ServerStyleSheet,
StyleSheetManager: typeof Npm$StyledComponents$StyleSheetManager,
ThemeProvider: typeof Npm$StyledComponents$ThemeProvider,
...$npm$styledComponents$DOMElements<StyledComponentsComponentListKeys>,
}
}
type $npm$styledComponents$NativeElements<Keys> = {|
ActivityIndicator: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ActivityIndicatorIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ART: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Button: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
DatePickerIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
DrawerLayoutAndroid: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Image: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ImageBackground: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ImageEditor: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ImageStore: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
KeyboardAvoidingView: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ListView: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
MapView: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Modal: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Navigator: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
NavigatorIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Picker: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
PickerIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ProgressBarAndroid: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ProgressViewIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ScrollView: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SegmentedControlIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Slider: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SliderIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SnapshotViewIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Switch: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
RecyclerViewBackedScrollView: $npm$styledComponents$TaggedLiteral<
*,
{},
Keys
>,
RefreshControl: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
StatusBar: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SwipeableListView: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SwitchAndroid: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SwitchIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
TabBarIOS: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Text: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
TextInput: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ToastAndroid: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ToolbarAndroid: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
Touchable: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
TouchableHighlight: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
TouchableNativeFeedback: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
TouchableOpacity: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
TouchableWithoutFeedback: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
View: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
ViewPagerAndroid: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
WebView: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
FlatList: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
SectionList: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
VirtualizedList: $npm$styledComponents$TaggedLiteral<*, {}, Keys>,
|}
declare module 'styled-components/native' {
declare type Interpolation = $npm$styledComponents$Interpolation
declare type NameGenerator = $npm$styledComponents$NameGenerator
declare type Theme = $npm$styledComponents$Theme
declare type ThemeProviderProps = $npm$styledComponents$ThemeProviderProps
declare type TaggedTemplateLiteral<
R
> = $npm$styledComponents$TaggedTemplateLiteral<R>
declare type StyledComponentsComponentListKeys = $Keys<
$npm$styledComponents$NativeElements<StyledComponentsComponentListKeys>
>
declare type StyledComponent<D, P> = Npm$styledComponents$StyledComponent<
D,
P,
StyledComponentsComponentListKeys
>
declare module.exports: {
$call: $npm$styledComponents$Styled<StyledComponentsComponentListKeys>,
css: $npm$styledComponents$TaggedTemplateLiteral<
$npm$styledComponents$RuleSet
>,
injectGlobal: $npm$styledComponents$TaggedTemplateLiteral<void>,
keyframes: $npm$styledComponents$TaggedTemplateLiteral<string>,
withTheme: $npm$styledComponents$WithTheme,
ThemeProvider: typeof Npm$StyledComponents$ThemeProvider,
...$npm$styledComponents$NativeElements<StyledComponentsComponentListKeys>,
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment