@compiled/react 0.10.4 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/browser/class-names/index.d.ts +11 -5
  2. package/dist/browser/class-names/index.js.flow +29 -20
  3. package/dist/browser/class-names/index.js.map +1 -1
  4. package/dist/browser/css/index.d.ts +3 -3
  5. package/dist/browser/css/index.js.flow +24 -23
  6. package/dist/browser/css/index.js.map +1 -1
  7. package/dist/browser/index.d.ts +2 -3
  8. package/dist/browser/index.js.flow +4 -7
  9. package/dist/browser/index.js.map +1 -1
  10. package/dist/browser/jsx/jsx-local-namespace.d.ts +2 -2
  11. package/dist/browser/keyframes/index.d.ts +1 -1
  12. package/dist/browser/keyframes/index.js.flow +25 -31
  13. package/dist/browser/runtime/ax.js.flow +1 -1
  14. package/dist/browser/runtime/cache.js.flow +1 -1
  15. package/dist/browser/runtime/css-custom-property.js +1 -1
  16. package/dist/browser/runtime/css-custom-property.js.flow +1 -1
  17. package/dist/browser/runtime/css-custom-property.js.map +1 -1
  18. package/dist/browser/runtime/dev-warnings.js.flow +1 -1
  19. package/dist/browser/runtime/index.js.flow +1 -1
  20. package/dist/browser/runtime/{is-node.d.ts → is-server-environment.d.ts} +2 -2
  21. package/dist/browser/runtime/is-server-environment.js +31 -0
  22. package/dist/{cjs/runtime/is-node.js.flow → browser/runtime/is-server-environment.js.flow} +4 -4
  23. package/dist/browser/runtime/is-server-environment.js.map +1 -0
  24. package/dist/browser/runtime/sheet.js.flow +1 -1
  25. package/dist/browser/runtime/style-cache.js +1 -1
  26. package/dist/browser/runtime/style-cache.js.flow +1 -1
  27. package/dist/browser/runtime/style-cache.js.map +1 -1
  28. package/dist/browser/runtime/style.js +1 -1
  29. package/dist/browser/runtime/style.js.flow +1 -1
  30. package/dist/browser/runtime/style.js.map +1 -1
  31. package/dist/browser/runtime/types.js.flow +2 -2
  32. package/dist/browser/runtime.js.flow +1 -1
  33. package/dist/browser/styled/index.d.ts +10 -23
  34. package/dist/browser/styled/index.js.flow +45 -46
  35. package/dist/browser/styled/index.js.map +1 -1
  36. package/dist/browser/types.d.ts +9 -5
  37. package/dist/browser/types.js.flow +13 -10
  38. package/dist/browser/utils/error.js.flow +1 -1
  39. package/dist/cjs/class-names/index.d.ts +11 -5
  40. package/dist/cjs/class-names/index.js.flow +29 -20
  41. package/dist/cjs/class-names/index.js.map +1 -1
  42. package/dist/cjs/css/index.d.ts +3 -3
  43. package/dist/cjs/css/index.js.flow +24 -23
  44. package/dist/cjs/css/index.js.map +1 -1
  45. package/dist/cjs/index.d.ts +2 -3
  46. package/dist/cjs/index.js.flow +4 -7
  47. package/dist/cjs/index.js.map +1 -1
  48. package/dist/cjs/jsx/jsx-local-namespace.d.ts +2 -2
  49. package/dist/cjs/keyframes/index.d.ts +1 -1
  50. package/dist/cjs/keyframes/index.js.flow +25 -31
  51. package/dist/cjs/runtime/ax.js.flow +1 -1
  52. package/dist/cjs/runtime/cache.js.flow +1 -1
  53. package/dist/cjs/runtime/css-custom-property.js +1 -1
  54. package/dist/cjs/runtime/css-custom-property.js.flow +1 -1
  55. package/dist/cjs/runtime/css-custom-property.js.map +1 -1
  56. package/dist/cjs/runtime/dev-warnings.js.flow +1 -1
  57. package/dist/cjs/runtime/index.js.flow +1 -1
  58. package/dist/{esm/runtime/is-node.d.ts → cjs/runtime/is-server-environment.d.ts} +2 -2
  59. package/dist/cjs/runtime/is-server-environment.js +35 -0
  60. package/dist/{esm/runtime/is-node.js.flow → cjs/runtime/is-server-environment.js.flow} +4 -4
  61. package/dist/cjs/runtime/is-server-environment.js.map +1 -0
  62. package/dist/cjs/runtime/sheet.js.flow +1 -1
  63. package/dist/cjs/runtime/style-cache.js +5 -5
  64. package/dist/cjs/runtime/style-cache.js.flow +1 -1
  65. package/dist/cjs/runtime/style-cache.js.map +1 -1
  66. package/dist/cjs/runtime/style.js +2 -2
  67. package/dist/cjs/runtime/style.js.flow +1 -1
  68. package/dist/cjs/runtime/style.js.map +1 -1
  69. package/dist/cjs/runtime/types.js.flow +2 -2
  70. package/dist/cjs/runtime.js.flow +1 -1
  71. package/dist/cjs/styled/index.d.ts +10 -23
  72. package/dist/cjs/styled/index.js.flow +45 -46
  73. package/dist/cjs/styled/index.js.map +1 -1
  74. package/dist/cjs/types.d.ts +9 -5
  75. package/dist/cjs/types.js.flow +13 -10
  76. package/dist/cjs/utils/error.js.flow +1 -1
  77. package/dist/esm/class-names/index.d.ts +11 -5
  78. package/dist/esm/class-names/index.js.flow +29 -20
  79. package/dist/esm/class-names/index.js.map +1 -1
  80. package/dist/esm/css/index.d.ts +3 -3
  81. package/dist/esm/css/index.js.flow +24 -23
  82. package/dist/esm/css/index.js.map +1 -1
  83. package/dist/esm/index.d.ts +2 -3
  84. package/dist/esm/index.js.flow +4 -7
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/jsx/jsx-local-namespace.d.ts +2 -2
  87. package/dist/esm/keyframes/index.d.ts +1 -1
  88. package/dist/esm/keyframes/index.js.flow +25 -31
  89. package/dist/esm/runtime/ax.js.flow +1 -1
  90. package/dist/esm/runtime/cache.js.flow +1 -1
  91. package/dist/esm/runtime/css-custom-property.js +1 -1
  92. package/dist/esm/runtime/css-custom-property.js.flow +1 -1
  93. package/dist/esm/runtime/css-custom-property.js.map +1 -1
  94. package/dist/esm/runtime/dev-warnings.js.flow +1 -1
  95. package/dist/esm/runtime/index.js.flow +1 -1
  96. package/dist/{cjs/runtime/is-node.d.ts → esm/runtime/is-server-environment.d.ts} +2 -2
  97. package/dist/esm/runtime/is-server-environment.js +31 -0
  98. package/dist/{browser/runtime/is-node.js.flow → esm/runtime/is-server-environment.js.flow} +4 -4
  99. package/dist/esm/runtime/is-server-environment.js.map +1 -0
  100. package/dist/esm/runtime/sheet.js.flow +1 -1
  101. package/dist/esm/runtime/style-cache.js +5 -5
  102. package/dist/esm/runtime/style-cache.js.flow +1 -1
  103. package/dist/esm/runtime/style-cache.js.map +1 -1
  104. package/dist/esm/runtime/style.js +2 -2
  105. package/dist/esm/runtime/style.js.flow +1 -1
  106. package/dist/esm/runtime/style.js.map +1 -1
  107. package/dist/esm/runtime/types.js.flow +2 -2
  108. package/dist/esm/runtime.js.flow +1 -1
  109. package/dist/esm/styled/index.d.ts +10 -23
  110. package/dist/esm/styled/index.js.flow +45 -46
  111. package/dist/esm/styled/index.js.map +1 -1
  112. package/dist/esm/types.d.ts +9 -5
  113. package/dist/esm/types.js.flow +13 -10
  114. package/dist/esm/utils/error.js.flow +1 -1
  115. package/package.json +5 -5
  116. package/src/__tests__/browser.test.tsx +4 -0
  117. package/src/__tests__/server-side-hydrate.test.tsx +2 -2
  118. package/src/class-names/__tests__/types.test.js.flow +10 -3
  119. package/src/class-names/index.js.flow +29 -20
  120. package/src/class-names/index.ts +15 -9
  121. package/src/css/__tests__/types.test.js.flow +25 -0
  122. package/src/css/index.js.flow +24 -23
  123. package/src/css/index.ts +9 -14
  124. package/src/index.js.flow +4 -7
  125. package/src/index.ts +3 -4
  126. package/src/jsx/jsx-local-namespace.ts +2 -2
  127. package/src/keyframes/__tests__/index.test.tsx +4 -0
  128. package/src/keyframes/index.js.flow +25 -31
  129. package/src/keyframes/index.ts +1 -1
  130. package/src/runtime/__tests__/css-custom-property.test.ts +2 -2
  131. package/src/runtime/__tests__/style.test.tsx +4 -0
  132. package/src/runtime/ax.js.flow +1 -1
  133. package/src/runtime/cache.js.flow +1 -1
  134. package/src/runtime/css-custom-property.js.flow +1 -1
  135. package/src/runtime/css-custom-property.ts +1 -1
  136. package/src/runtime/dev-warnings.js.flow +1 -1
  137. package/src/runtime/index.js.flow +1 -1
  138. package/src/runtime/{is-node.js.flow → is-server-environment.js.flow} +4 -4
  139. package/src/runtime/is-server-environment.ts +29 -0
  140. package/src/runtime/sheet.js.flow +1 -1
  141. package/src/runtime/style-cache.js.flow +1 -1
  142. package/src/runtime/style-cache.tsx +5 -5
  143. package/src/runtime/style.js.flow +1 -1
  144. package/src/runtime/style.tsx +2 -2
  145. package/src/runtime/types.js.flow +2 -2
  146. package/src/runtime.js.flow +1 -1
  147. package/src/styled/__tests__/index.test.tsx +1 -1
  148. package/src/styled/__tests__/types.test.js.flow +65 -11
  149. package/src/styled/index.js.flow +45 -46
  150. package/src/styled/index.ts +21 -39
  151. package/src/types.js.flow +13 -10
  152. package/src/types.ts +19 -11
  153. package/src/utils/error.js.flow +1 -1
  154. package/dist/browser/runtime/is-node.js +0 -16
  155. package/dist/browser/runtime/is-node.js.map +0 -1
  156. package/dist/cjs/runtime/is-node.js +0 -20
  157. package/dist/cjs/runtime/is-node.js.map +0 -1
  158. package/dist/esm/runtime/is-node.js +0 -16
  159. package/dist/esm/runtime/is-node.js.map +0 -1
  160. package/src/runtime/is-node.ts +0 -15
@@ -2,16 +2,16 @@ import * as React from 'react';
2
2
  import { createContext, useContext } from 'react';
3
3
 
4
4
  import { isCacheDisabled } from './cache';
5
- import { isNodeEnvironment } from './is-node';
5
+ import { isServerEnvironment } from './is-server-environment';
6
6
  import type { ProviderComponent, UseCacheHook } from './types';
7
7
 
8
8
  /**
9
9
  * Cache to hold already used styles.
10
10
  * React Context on the server - singleton object on the client.
11
11
  */
12
- const Cache: any = isNodeEnvironment() ? createContext<Record<string, true> | null>(null) : {};
12
+ const Cache: any = isServerEnvironment() ? createContext<Record<string, true> | null>(null) : {};
13
13
 
14
- if (!isNodeEnvironment()) {
14
+ if (!isServerEnvironment()) {
15
15
  /**
16
16
  * Iterates through all found style elements generated when server side rendering.
17
17
  *
@@ -32,7 +32,7 @@ export const useCache: UseCacheHook = () => {
32
32
  return {};
33
33
  }
34
34
 
35
- if (isNodeEnvironment()) {
35
+ if (isServerEnvironment()) {
36
36
  // On the server we use React Context to we don't leak the cache between SSR calls.
37
37
  // During runtime this hook isn't conditionally called - it is at build time that the flow gets decided.
38
38
  // eslint-disable-next-line react-hooks/rules-of-hooks
@@ -50,7 +50,7 @@ export const useCache: UseCacheHook = () => {
50
50
  * On the browser this turns into a fragment with no React Context.
51
51
  */
52
52
  const StyleCacheProvider: ProviderComponent = (props) => {
53
- if (isNodeEnvironment()) {
53
+ if (isServerEnvironment()) {
54
54
  // This code path isn't conditionally called at build time - safe to ignore.
55
55
  // eslint-disable-next-line react-hooks/rules-of-hooks
56
56
  const inserted = useCache();
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flowtype definitions for style
3
3
  * Generated by Flowgen from a Typescript Definition
4
- * Flowgen v1.15.0
4
+ * Flowgen v1.17.0
5
5
  * @flow
6
6
  */
7
7
  import type { StyleSheetOpts } from './types';
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
3
  import { analyzeCssInDev } from './dev-warnings';
4
- import { isNodeEnvironment } from './is-node';
4
+ import { isServerEnvironment } from './is-server-environment';
5
5
  import insertRule, { getStyleBucketName, styleBucketOrdering } from './sheet';
6
6
  import { useCache } from './style-cache';
7
7
  import type { Bucket, StyleSheetOpts } from './types';
@@ -22,7 +22,7 @@ export default function Style(props: StyleProps): JSX.Element | null {
22
22
  }
23
23
 
24
24
  if (props.children.length) {
25
- if (isNodeEnvironment()) {
25
+ if (isServerEnvironment()) {
26
26
  const bucketedSheets: Partial<Record<Bucket, string>> = {};
27
27
  let hasSheets = false;
28
28
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flowtype definitions for types
3
3
  * Generated by Flowgen from a Typescript Definition
4
- * Flowgen v1.15.0
4
+ * Flowgen v1.17.0
5
5
  * @flow
6
6
  */
7
7
  export interface StyleSheetOpts {
@@ -16,7 +16,7 @@ export interface StyleSheetOpts {
16
16
  * Buckets under which we will group our stylesheets
17
17
  */
18
18
  export type Bucket = '' | 'l' | 'v' | 'w' | 'f' | 'i' | 'h' | 'a' | 'm';
19
- export type UseCacheHook = () => { [key: string]: true, ... };
19
+ export type UseCacheHook = () => { [key: string]: true };
20
20
  export type ProviderComponent = (props: {
21
21
  children: React$Node[] | React$Node,
22
22
  ...
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flowtype definitions for runtime
3
3
  * Generated by Flowgen from a Typescript Definition
4
- * Flowgen v1.15.0
4
+ * Flowgen v1.17.0
5
5
  * @flow
6
6
  */
7
7
  declare export { CC, CS, ax, ix } from './runtime/index';
@@ -188,7 +188,7 @@ describe('styled component', () => {
188
188
  expect(ref).toHaveProperty('tagName', 'A');
189
189
  });
190
190
 
191
- it('should overide the underlying markup with a span', () => {
191
+ it('should override the underlying markup with a span', () => {
192
192
  const Heading = styled.h1`
193
193
  color: red;
194
194
  `;
@@ -1,30 +1,84 @@
1
1
  // @flow strict-local
2
- import React, { type Node } from 'react';
3
- import { styled, type CssObject, type CSSProps } from '@compiled/react';
2
+ import React, { type Node, type Element } from 'react';
3
+ import { styled, type CssType } from '@compiled/react';
4
4
 
5
5
  // Tagged template expression
6
6
  () => {
7
- const StyledTaggedTemplateExpression = styled.div`
7
+ const StyledComponent = styled.div`
8
8
  font-size: 12px;
9
9
  `;
10
- return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
10
+ return <StyledComponent>red text</StyledComponent>;
11
+ };
12
+
13
+ // Tagged template expression with conditional
14
+ () => {
15
+ const StyledComponent = styled.div`
16
+ font-size: ${({ big }) => (big ? big : 12)}px;
17
+ `;
18
+ return <StyledComponent big>red text</StyledComponent>;
11
19
  };
12
20
 
13
21
  // Object call expression
14
22
  () => {
15
- const StyledTaggedTemplateExpression = styled.div({ fontSize: 12 });
16
- return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
23
+ const StyledComponent = styled.div<{ big: number, children: Node }>({
24
+ fontSize: (props: { big: number, children: Node }): number => (props.big == 5 ? 50 : 10),
25
+ });
26
+
27
+ return <StyledComponent big={5}>red text</StyledComponent>;
28
+ };
29
+
30
+ // Object call expression with no props
31
+ () => {
32
+ const StyledComponent = styled.div({
33
+ wordBreak: 'break-word',
34
+ position: 'relative',
35
+ left: `${2 - 2}px`,
36
+ });
37
+
38
+ return <StyledComponent>red text</StyledComponent>;
39
+ };
40
+
41
+ // Object call expression with conditional
42
+ () => {
43
+ const StyledComponent = styled.div<{ big: number, children: Node }>({
44
+ fontSize: ({ big }) => `${big ? 50 : 12}px`,
45
+ width: ({ big }) => (big ? 500 : 120),
46
+ });
47
+
48
+ return <StyledComponent big={5}>red text</StyledComponent>;
49
+ };
50
+
51
+ // Object call expression with logical operator expression
52
+ () => {
53
+ // Type defined as constant so we test the type without sketchy null check errors
54
+ const StyledComponent = styled.div<{ big?: 5000, children: Node }>(
55
+ {
56
+ fontSize: ({ big }) => `${big || 50}px`,
57
+ width: ({ big }) => big && 500,
58
+ },
59
+ ({ big }) => big && { height: '100px' }
60
+ );
61
+
62
+ return <StyledComponent big={5000}>red text</StyledComponent>;
17
63
  };
18
64
 
19
65
  // Array
20
66
  () => {
21
- const styles: CSSProps[] = [{ fontSize: '12px' }];
22
- const StyledTaggedTemplateExpression = styled.div(styles);
23
- return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
67
+ const styles: CssType<{ fontSize: number, children: Node }>[] = [{ fontSize: '12px' }];
68
+ const StyledComponent = styled.div(styles);
69
+ return <StyledComponent fontSize={50}>red text</StyledComponent>;
24
70
  };
25
71
 
26
72
  // Multiple arguments
27
73
  () => {
28
- const StyledTaggedTemplateExpression = styled.div({ fontSize: 12 }, `font-size: 12px`);
29
- return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
74
+ const StyledComponent = styled.div({ fontSize: 12 }, `font-size: 12px`);
75
+ return <StyledComponent>red text</StyledComponent>;
76
+ };
77
+
78
+ // Dynamic function calls
79
+ () => {
80
+ const StyledComponent = styled.div({
81
+ backgroundColor: token('elevation.surface', 'black'),
82
+ zIndex: layers.modal(),
83
+ });
30
84
  };
@@ -1,69 +1,68 @@
1
1
  /**
2
2
  * Flowtype definitions for index
3
3
  * Generated by Flowgen from a Typescript Definition
4
- * Flowgen v1.15.0
4
+ * Flowgen v1.17.0
5
5
  * @flow
6
6
  */
7
7
  import type { ComponentType } from 'react';
8
- import type { BasicTemplateInterpolations, CssFunction, FunctionInterpolation } from '../types';
9
- /**
10
- * Typing for the CSS object.
11
- */
12
- export type CssObject<TProps> = CssFunction<FunctionInterpolation<TProps>>;
8
+ import type { CssType, CssFunction } from '../types';
13
9
  /**
14
10
  * Extra props added to the output Styled Component.
15
11
  */
16
12
  export type StyledProps = {
17
13
  as?: $Keys<$JSXIntrinsics>,
18
14
  };
19
- export type Interpolations<TProps: mixed> = (
20
- | BasicTemplateInterpolations
21
- | FunctionInterpolation<TProps>
22
- | CssObject<TProps>
23
- | CssObject<TProps>[]
24
- )[];
25
- /**
26
- * This allows us to take the generic `TTag` (that will be a valid `DOM` tag) and then use it to
27
- * define correct props based on it from `$JSXIntrinsics`, while also injecting our own
28
- * props from `StyledProps`.
29
- */
30
- export interface StyledFunctionFromTag<TTag: $Keys<$JSXIntrinsics>> {
31
- <TProps: mixed>(
32
- css: CssObject<TProps> | $ReadOnlyArray<CssObject<TProps>>,
33
- ...interpolations: Interpolations<TProps>
34
- ): React$ComponentType<{
35
- ...TProps,
36
- ...$Exact<$ElementType<$JSXIntrinsics, TTag>>,
37
- ...StyledProps,
38
- }>;
39
- }
40
- export interface StyledFunctionFromComponent<TInheritedProps: mixed> {
41
- <TProps: mixed>(
42
- css: CssObject<TProps> | $ReadOnlyArray<string>,
43
- ...interpolations: Interpolations<TProps>
44
- ): React$ComponentType<{ ...TProps, ...StyledProps, ...TInheritedProps }>;
15
+ export type ObjectInterpolation<TProps> = CssType<TProps> | CssType<TProps>[];
16
+ export type TemplateStringsInterpolation<TProps> = CssFunction<TProps> | CssFunction<TProps>[];
17
+ export interface StyledComponent<ComponentProps: mixed> {
18
+ <TProps>(
19
+ ...css: ObjectInterpolation<TProps>[]
20
+ ): React$ComponentType<{ ...TProps, ...ComponentProps, ...StyledProps }>;
21
+ <TProps>(
22
+ template: $ReadOnlyArray<string>,
23
+ ...interpolations: TemplateStringsInterpolation<TProps>[]
24
+ ): React$ComponentType<{ ...TProps, ...ComponentProps, ...StyledProps }>;
45
25
  }
46
- export type StyledComponentMap = $ObjMapi<$JSXIntrinsics, <Tag>(Tag) => StyledFunctionFromTag<Tag>>;
47
- export type StyledComponentInstantiator = {
48
- /**
49
- * Typing to enable consumers to compose components, e.g: `styled(Component)`
50
- */
26
+ export type StyledComponentMap = $ObjMapi<$JSXIntrinsics, <Tag>(Tag) => StyledComponent<mixed>>;
27
+ export type CreateStyledComponent = {
51
28
  <TInheritedProps: mixed>(
52
29
  Component: ComponentType<TInheritedProps>
53
- ): StyledFunctionFromComponent<TInheritedProps>,
30
+ ): StyledComponent<TInheritedProps>,
54
31
  ...
55
32
  } & StyledComponentMap;
56
33
  /**
57
- * Create a component that ties styles to an element which comes with built-in behavior such as `ref` and `as` prop support.
34
+ * ## Styled component
58
35
  *
36
+ * Create a component that styles a JSX element which comes with built-in behavior such as `ref` and `as` prop support.
37
+ * For further details [read the documentation](https://compiledcssinjs.com/docs/api-styled).
38
+ *
39
+ * ### Style with objects
40
+ * @example ```
41
+ * styled.div({
42
+ * fontSize: 12,
43
+ * });
59
44
  * ```
60
- * styled.div`font-size: 12px`; // Template literal CSS
61
- * styled.div({ fontSize: 12 }); // Object CSS
62
- * styled.div([{ fontSize: 12 }, `font-size: 12px;`]) // Array CSS
63
- * styled.div({ fontSize: 12 }, `font-size: 12px`) Multi arguments CSS
45
+ *
46
+ * ### Style with template literals
47
+ * @example ```
48
+ * styled.div`
49
+ * font-size: 12px
50
+ * `;
64
51
  * ```
65
52
  *
66
- * For more help, read the docs:
67
- * https://compiledcssinjs.com/docs/api-styled
53
+ * ### Compose styles with arrays
54
+ * @example ```
55
+ * import type { css } from '@compiled/react';
56
+ *
57
+ * styled.div([
58
+ * { fontSize: 12 },
59
+ * css`font-size: 12px;`
60
+ * ]);
61
+ *
62
+ * styled.div(
63
+ * { fontSize: 12 },
64
+ * css`font-size: 12px`
65
+ * );
66
+ * ```
68
67
  */
69
- declare export var styled: StyledComponentInstantiator;
68
+ declare export var styled: CreateStyledComponent;
@@ -1,13 +1,8 @@
1
1
  import type { ComponentType } from 'react';
2
2
 
3
- import type { BasicTemplateInterpolations, CssFunction, FunctionInterpolation } from '../types';
3
+ import type { CssType, CssFunction } from '../types';
4
4
  import { createSetupError } from '../utils/error';
5
5
 
6
- /**
7
- * Typing for the CSS object.
8
- */
9
- export type CssObject<TProps> = CssFunction<FunctionInterpolation<TProps>>;
10
-
11
6
  /**
12
7
  * Extra props added to the output Styled Component.
13
8
  */
@@ -15,46 +10,33 @@ export interface StyledProps {
15
10
  as?: keyof JSX.IntrinsicElements;
16
11
  }
17
12
 
18
- export type Interpolations<TProps extends unknown> = (
19
- | BasicTemplateInterpolations
20
- | FunctionInterpolation<TProps>
21
- | CssObject<TProps>
22
- | CssObject<TProps>[]
23
- )[];
24
-
25
- /**
26
- * This allows us to take the generic `TTag` (that will be a valid `DOM` tag) and then use it to
27
- * define correct props based on it from `JSX.IntrinsicElements`, while also injecting our own
28
- * props from `StyledProps`.
29
- */
30
- export interface StyledFunctionFromTag<TTag extends keyof JSX.IntrinsicElements> {
31
- <TProps extends unknown>(
32
- // Allows either string or object (`` or ({}))
33
- css: CssObject<TProps> | CssObject<TProps>[],
34
- ...interpolations: Interpolations<TProps>
35
- ): React.ComponentType<TProps & JSX.IntrinsicElements[TTag] & StyledProps>;
36
- }
13
+ export type ObjectInterpolation<TProps> = CssType<TProps> | CssType<TProps>[];
14
+ export type TemplateStringsInterpolation<TProps> = CssFunction<TProps> | CssFunction<TProps>[];
37
15
 
38
- export interface StyledFunctionFromComponent<TInheritedProps extends unknown> {
39
- <TProps extends unknown>(
40
- // Allows either string or object (`` or ({}))
41
- css: CssObject<TProps> | TemplateStringsArray,
42
- ...interpolations: Interpolations<TProps>
43
- ): React.ComponentType<TProps & StyledProps & TInheritedProps>;
16
+ export interface StyledComponent<ComponentProps extends unknown> {
17
+ // Allows either string or object (`` or ({}))
18
+ // We disable the ban types rule here as we need to join the empty object default with other props
19
+ // eslint-disable-next-line @typescript-eslint/ban-types
20
+ <TProps = {}>(...css: ObjectInterpolation<TProps>[]): React.ComponentType<
21
+ TProps & ComponentProps & StyledProps
22
+ >;
23
+ // eslint-disable-next-line @typescript-eslint/ban-types
24
+ <TProps = {}>(
25
+ template: TemplateStringsArray,
26
+ ...interpolations: TemplateStringsInterpolation<TProps>[]
27
+ ): React.ComponentType<TProps & ComponentProps & StyledProps>;
44
28
  }
45
29
 
30
+ // This creates the DOM element types for `styled.tag`, e.g. `span`, `div`, `h1`, etc.
46
31
  export type StyledComponentMap = {
47
- // This creates the DOM element types for `styled.blah`, e.g. `span`, `div`, `h1`, etc.
48
- [Tag in keyof JSX.IntrinsicElements]: StyledFunctionFromTag<Tag>;
32
+ [Tag in keyof JSX.IntrinsicElements]: StyledComponent<JSX.IntrinsicElements[Tag]>;
49
33
  };
50
34
 
51
- export interface StyledComponentInstantiator extends StyledComponentMap {
52
- /**
53
- * Typing to enable consumers to compose components, e.g: `styled(Component)`
54
- */
35
+ export interface CreateStyledComponent extends StyledComponentMap {
36
+ // Typing to enable consumers to compose components, e.g: `styled(Component)`
55
37
  <TInheritedProps extends unknown>(
56
38
  Component: ComponentType<TInheritedProps>
57
- ): StyledFunctionFromComponent<TInheritedProps>;
39
+ ): StyledComponent<TInheritedProps>;
58
40
  }
59
41
 
60
42
  /**
@@ -98,7 +80,7 @@ export interface StyledComponentInstantiator extends StyledComponentMap {
98
80
  * );
99
81
  * ```
100
82
  */
101
- export const styled: StyledComponentInstantiator = new Proxy(
83
+ export const styled: CreateStyledComponent = new Proxy(
102
84
  {},
103
85
  {
104
86
  get() {
package/src/types.js.flow CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flowtype definitions for types
3
3
  * Generated by Flowgen from a Typescript Definition
4
- * Flowgen v1.15.0
4
+ * Flowgen v1.17.0
5
5
  * @flow
6
6
  */
7
7
  import * as CSS from 'csstype';
@@ -10,20 +10,23 @@ import * as CSS from 'csstype';
10
10
  */
11
11
  export type BasicTemplateInterpolations = string | number;
12
12
  export interface FunctionInterpolation<TProps> {
13
- (props: TProps): CSSProps | BasicTemplateInterpolations | boolean | void;
13
+ (props: TProps): CssFunction<TProps>;
14
14
  }
15
+ /**
16
+ * Possible types for a CSS value
17
+ */
18
+ export type CssType<TProps> = CssObject<TProps> | FunctionInterpolation<TProps> | string;
15
19
  /**
16
20
  * These are all the CSS props that will exist.
17
21
  */
18
- export type CSSProps = CSS.Properties<BasicTemplateInterpolations>;
19
- export type AnyKeyCssProps<TValue> = {
20
- [key: string]: AnyKeyCssProps<TValue> | CSSProps | BasicTemplateInterpolations | TValue,
22
+ export type CSSProps<TProps> = CSS.Properties<CssFunction<TProps>>;
23
+ export type CssObject<TProps> = {
24
+ ...CSSProps<TProps>,
25
+ [key: string]: CssFunction<TProps>,
21
26
  ...
22
27
  };
23
- export type CssFunction<TValue = void> =
24
- | CSSProps
25
- | AnyKeyCssProps<TValue>
26
- | $ReadOnlyArray<string>
27
- | string
28
+ export type CssFunction<TProps = mixed> =
29
+ | CssType<TProps>
30
+ | BasicTemplateInterpolations
28
31
  | boolean
29
32
  | void;
package/src/types.ts CHANGED
@@ -6,22 +6,30 @@ import type * as CSS from 'csstype';
6
6
  export type BasicTemplateInterpolations = string | number;
7
7
 
8
8
  export interface FunctionInterpolation<TProps> {
9
- (props: TProps): CSSProps | BasicTemplateInterpolations | boolean | undefined;
9
+ (props: TProps): CssFunction<TProps>;
10
10
  }
11
11
 
12
+ /**
13
+ * Possible types for a CSS value
14
+ */
15
+ export type CssType<TProps> =
16
+ | CSSProps<TProps> // Typed CSS properties
17
+ | CssObject<TProps> // CSS object
18
+ | FunctionInterpolation<TProps> // Props provider usage
19
+ | string; // Plain css string
20
+
12
21
  /**
13
22
  * These are all the CSS props that will exist.
14
23
  */
15
- export type CSSProps = CSS.Properties<BasicTemplateInterpolations>;
24
+ export type CSSProps<TProps> = CSS.Properties<CssFunction<TProps>>;
16
25
 
17
- export type AnyKeyCssProps<TValue> = {
18
- [key: string]: AnyKeyCssProps<TValue> | CSSProps | BasicTemplateInterpolations | TValue;
26
+ export type CssObject<TProps> = {
27
+ [key: string]: CssFunction<TProps>;
19
28
  };
20
29
 
21
- export type CssFunction<TValue = void> =
22
- | CSSProps
23
- | AnyKeyCssProps<TValue>
24
- | TemplateStringsArray
25
- | string
26
- | boolean
27
- | undefined;
30
+ // CSS inside of a CSS expression
31
+ export type CssFunction<TProps = unknown> =
32
+ | CssType<TProps>
33
+ | BasicTemplateInterpolations // CSS values in tagged template expression
34
+ | boolean // Something like `false && styles`
35
+ | undefined; // Something like `undefined && styles`
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Flowtype definitions for error
3
3
  * Generated by Flowgen from a Typescript Definition
4
- * Flowgen v1.15.0
4
+ * Flowgen v1.17.0
5
5
  * @flow
6
6
  */
7
7
  declare export var createSetupError: () => Error;
@@ -1,16 +0,0 @@
1
- /**
2
- * Returns `true` when inside a node environment,
3
- * else `false`.
4
- *
5
- * When using this it will remove any node code from the browser bundle - for example:
6
- *
7
- * ```js
8
- * if (isNodeEnvironment()) {
9
- * // This code will be removed from the browser bundle
10
- * }
11
- * ```
12
- */
13
- export var isNodeEnvironment = function () {
14
- return typeof window === 'undefined';
15
- };
16
- //# sourceMappingURL=is-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-node.js","sourceRoot":"","sources":["../../../src/runtime/is-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,IAAM,iBAAiB,GAAG;IAC/B,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC,CAAC"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNodeEnvironment = void 0;
4
- /**
5
- * Returns `true` when inside a node environment,
6
- * else `false`.
7
- *
8
- * When using this it will remove any node code from the browser bundle - for example:
9
- *
10
- * ```js
11
- * if (isNodeEnvironment()) {
12
- * // This code will be removed from the browser bundle
13
- * }
14
- * ```
15
- */
16
- var isNodeEnvironment = function () {
17
- return typeof window === 'undefined';
18
- };
19
- exports.isNodeEnvironment = isNodeEnvironment;
20
- //# sourceMappingURL=is-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-node.js","sourceRoot":"","sources":["../../../src/runtime/is-node.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACI,IAAM,iBAAiB,GAAG;IAC/B,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Returns `true` when inside a node environment,
3
- * else `false`.
4
- *
5
- * When using this it will remove any node code from the browser bundle - for example:
6
- *
7
- * ```js
8
- * if (isNodeEnvironment()) {
9
- * // This code will be removed from the browser bundle
10
- * }
11
- * ```
12
- */
13
- export var isNodeEnvironment = function () {
14
- return typeof window === 'undefined';
15
- };
16
- //# sourceMappingURL=is-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-node.js","sourceRoot":"","sources":["../../../src/runtime/is-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,IAAM,iBAAiB,GAAG;IAC/B,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Returns `true` when inside a node environment,
3
- * else `false`.
4
- *
5
- * When using this it will remove any node code from the browser bundle - for example:
6
- *
7
- * ```js
8
- * if (isNodeEnvironment()) {
9
- * // This code will be removed from the browser bundle
10
- * }
11
- * ```
12
- */
13
- export const isNodeEnvironment = (): boolean => {
14
- return typeof window === 'undefined';
15
- };