@compiled/react 0.6.13 → 0.9.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 (219) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/dist/browser/class-names/index.d.ts +2 -2
  3. package/dist/browser/class-names/index.js.flow +45 -0
  4. package/dist/browser/css/index.d.ts +16 -3
  5. package/dist/browser/css/index.js +0 -13
  6. package/dist/browser/css/index.js.flow +35 -0
  7. package/dist/browser/css/index.js.map +1 -1
  8. package/dist/browser/index.d.ts +4 -1
  9. package/dist/browser/index.js +1 -0
  10. package/dist/browser/index.js.flow +40 -0
  11. package/dist/browser/index.js.map +1 -1
  12. package/dist/browser/keyframes/__fixtures__/index.d.ts +3 -0
  13. package/dist/browser/keyframes/__fixtures__/index.js +12 -0
  14. package/dist/browser/keyframes/__fixtures__/index.js.map +1 -0
  15. package/dist/browser/keyframes/index.d.ts +47 -0
  16. package/dist/browser/keyframes/index.js +9 -0
  17. package/dist/browser/keyframes/index.js.flow +54 -0
  18. package/dist/browser/keyframes/index.js.map +1 -0
  19. package/dist/browser/runtime/ax.js.flow +27 -0
  20. package/dist/browser/runtime/css-custom-property.js.flow +19 -0
  21. package/dist/browser/runtime/dev-warnings.d.ts +0 -1
  22. package/dist/browser/runtime/dev-warnings.js +1 -1
  23. package/dist/browser/runtime/dev-warnings.js.flow +7 -0
  24. package/dist/browser/runtime/dev-warnings.js.map +1 -1
  25. package/dist/browser/runtime/index.js.flow +10 -0
  26. package/dist/browser/runtime/is-node.js.flow +19 -0
  27. package/dist/browser/runtime/sheet.d.ts +1 -1
  28. package/dist/browser/runtime/sheet.js.flow +36 -0
  29. package/dist/browser/runtime/style-cache.d.ts +1 -1
  30. package/dist/browser/runtime/style-cache.js.flow +19 -0
  31. package/dist/browser/runtime/style.d.ts +1 -1
  32. package/dist/browser/runtime/style.js.flow +17 -0
  33. package/dist/browser/runtime/types.js.flow +23 -0
  34. package/dist/browser/runtime.js.flow +7 -0
  35. package/dist/browser/styled/index.d.ts +6 -9
  36. package/dist/browser/styled/index.js.flow +69 -0
  37. package/dist/browser/styled/index.js.map +1 -1
  38. package/dist/browser/types.d.ts +6 -3
  39. package/dist/browser/types.js.flow +29 -0
  40. package/dist/browser/utils/error.js.flow +7 -0
  41. package/dist/cjs/class-names/index.d.ts +2 -2
  42. package/dist/cjs/class-names/index.js.flow +45 -0
  43. package/dist/cjs/css/index.d.ts +16 -3
  44. package/dist/cjs/css/index.js +0 -13
  45. package/dist/cjs/css/index.js.flow +35 -0
  46. package/dist/cjs/css/index.js.map +1 -1
  47. package/dist/cjs/index.d.ts +4 -1
  48. package/dist/cjs/index.js +3 -1
  49. package/dist/cjs/index.js.flow +40 -0
  50. package/dist/cjs/index.js.map +1 -1
  51. package/dist/cjs/keyframes/__fixtures__/index.d.ts +3 -0
  52. package/dist/cjs/keyframes/__fixtures__/index.js +15 -0
  53. package/dist/cjs/keyframes/__fixtures__/index.js.map +1 -0
  54. package/dist/cjs/keyframes/index.d.ts +47 -0
  55. package/dist/cjs/keyframes/index.js +13 -0
  56. package/dist/cjs/keyframes/index.js.flow +54 -0
  57. package/dist/cjs/keyframes/index.js.map +1 -0
  58. package/dist/cjs/runtime/ax.js.flow +27 -0
  59. package/dist/cjs/runtime/css-custom-property.js.flow +19 -0
  60. package/dist/cjs/runtime/dev-warnings.d.ts +0 -1
  61. package/dist/cjs/runtime/dev-warnings.js +2 -3
  62. package/dist/cjs/runtime/dev-warnings.js.flow +7 -0
  63. package/dist/cjs/runtime/dev-warnings.js.map +1 -1
  64. package/dist/cjs/runtime/index.js.flow +10 -0
  65. package/dist/cjs/runtime/is-node.js.flow +19 -0
  66. package/dist/cjs/runtime/sheet.d.ts +1 -1
  67. package/dist/cjs/runtime/sheet.js.flow +36 -0
  68. package/dist/cjs/runtime/style-cache.d.ts +1 -1
  69. package/dist/cjs/runtime/style-cache.js.flow +19 -0
  70. package/dist/cjs/runtime/style.d.ts +1 -1
  71. package/dist/cjs/runtime/style.js.flow +17 -0
  72. package/dist/cjs/runtime/types.js.flow +23 -0
  73. package/dist/cjs/runtime.js.flow +7 -0
  74. package/dist/cjs/styled/index.d.ts +6 -9
  75. package/dist/cjs/styled/index.js.flow +69 -0
  76. package/dist/cjs/styled/index.js.map +1 -1
  77. package/dist/cjs/types.d.ts +6 -3
  78. package/dist/cjs/types.js.flow +29 -0
  79. package/dist/cjs/utils/error.js.flow +7 -0
  80. package/dist/esm/class-names/index.d.ts +2 -2
  81. package/dist/esm/class-names/index.js.flow +45 -0
  82. package/dist/esm/css/index.d.ts +16 -3
  83. package/dist/esm/css/index.js +0 -13
  84. package/dist/esm/css/index.js.flow +35 -0
  85. package/dist/esm/css/index.js.map +1 -1
  86. package/dist/esm/index.d.ts +4 -1
  87. package/dist/esm/index.js +1 -0
  88. package/dist/esm/index.js.flow +40 -0
  89. package/dist/esm/index.js.map +1 -1
  90. package/dist/esm/keyframes/__fixtures__/index.d.ts +3 -0
  91. package/dist/esm/keyframes/__fixtures__/index.js +12 -0
  92. package/dist/esm/keyframes/__fixtures__/index.js.map +1 -0
  93. package/dist/esm/keyframes/index.d.ts +47 -0
  94. package/dist/esm/keyframes/index.js +9 -0
  95. package/dist/esm/keyframes/index.js.flow +54 -0
  96. package/dist/esm/keyframes/index.js.map +1 -0
  97. package/dist/esm/runtime/ax.js.flow +27 -0
  98. package/dist/esm/runtime/css-custom-property.js.flow +19 -0
  99. package/dist/esm/runtime/dev-warnings.d.ts +0 -1
  100. package/dist/esm/runtime/dev-warnings.js +1 -1
  101. package/dist/esm/runtime/dev-warnings.js.flow +7 -0
  102. package/dist/esm/runtime/dev-warnings.js.map +1 -1
  103. package/dist/esm/runtime/index.js.flow +10 -0
  104. package/dist/esm/runtime/is-node.js.flow +19 -0
  105. package/dist/esm/runtime/sheet.d.ts +1 -1
  106. package/dist/esm/runtime/sheet.js.flow +36 -0
  107. package/dist/esm/runtime/style-cache.d.ts +1 -1
  108. package/dist/esm/runtime/style-cache.js.flow +19 -0
  109. package/dist/esm/runtime/style.d.ts +1 -1
  110. package/dist/esm/runtime/style.js.flow +17 -0
  111. package/dist/esm/runtime/types.js.flow +23 -0
  112. package/dist/esm/runtime.js.flow +7 -0
  113. package/dist/esm/styled/index.d.ts +6 -9
  114. package/dist/esm/styled/index.js.flow +69 -0
  115. package/dist/esm/styled/index.js.map +1 -1
  116. package/dist/esm/types.d.ts +6 -3
  117. package/dist/esm/types.js.flow +29 -0
  118. package/dist/esm/utils/error.js.flow +7 -0
  119. package/package.json +18 -20
  120. package/src/class-names/__tests__/types.test.js.flow +28 -0
  121. package/src/class-names/index.js.flow +45 -0
  122. package/src/class-names/index.tsx +2 -2
  123. package/src/css/__tests__/index.test.tsx +41 -0
  124. package/src/css/__tests__/types.test.js.flow +17 -0
  125. package/src/css/index.js.flow +35 -0
  126. package/src/css/index.tsx +25 -3
  127. package/src/index.js.flow +40 -0
  128. package/src/index.tsx +5 -2
  129. package/src/keyframes/__fixtures__/index.tsx +14 -0
  130. package/src/keyframes/__tests__/index.test.tsx +324 -0
  131. package/src/keyframes/__tests__/types.test.js.flow +31 -0
  132. package/src/keyframes/index.js.flow +54 -0
  133. package/src/keyframes/index.tsx +61 -0
  134. package/src/runtime/__tests__/style.test.tsx +91 -57
  135. package/src/runtime/ax.js.flow +27 -0
  136. package/src/runtime/css-custom-property.js.flow +19 -0
  137. package/src/runtime/dev-warnings.js.flow +7 -0
  138. package/src/runtime/dev-warnings.tsx +1 -1
  139. package/src/runtime/index.js.flow +10 -0
  140. package/src/runtime/is-node.js.flow +19 -0
  141. package/src/runtime/sheet.js.flow +36 -0
  142. package/src/runtime/sheet.tsx +1 -1
  143. package/src/runtime/style-cache.js.flow +19 -0
  144. package/src/runtime/style-cache.tsx +1 -1
  145. package/src/runtime/style.js.flow +17 -0
  146. package/src/runtime/style.tsx +1 -1
  147. package/src/runtime/types.js.flow +23 -0
  148. package/src/runtime.js.flow +7 -0
  149. package/src/styled/__tests__/types.test.js.flow +30 -0
  150. package/src/styled/index.js.flow +69 -0
  151. package/src/styled/index.tsx +6 -10
  152. package/src/types.js.flow +29 -0
  153. package/src/types.tsx +7 -3
  154. package/src/utils/error.js.flow +7 -0
  155. package/dist/browser/codemods/codemods-helpers.d.ts +0 -60
  156. package/dist/browser/codemods/codemods-helpers.js +0 -201
  157. package/dist/browser/codemods/codemods-helpers.js.map +0 -1
  158. package/dist/browser/codemods/constants.d.ts +0 -3
  159. package/dist/browser/codemods/constants.js +0 -4
  160. package/dist/browser/codemods/constants.js.map +0 -1
  161. package/dist/browser/codemods/emotion-to-compiled/emotion-to-compiled.d.ts +0 -3
  162. package/dist/browser/codemods/emotion-to-compiled/emotion-to-compiled.js +0 -178
  163. package/dist/browser/codemods/emotion-to-compiled/emotion-to-compiled.js.map +0 -1
  164. package/dist/browser/codemods/emotion-to-compiled/index.d.ts +0 -1
  165. package/dist/browser/codemods/emotion-to-compiled/index.js +0 -2
  166. package/dist/browser/codemods/emotion-to-compiled/index.js.map +0 -1
  167. package/dist/browser/codemods/styled-components-to-compiled/index.d.ts +0 -1
  168. package/dist/browser/codemods/styled-components-to-compiled/index.js +0 -2
  169. package/dist/browser/codemods/styled-components-to-compiled/index.js.map +0 -1
  170. package/dist/browser/codemods/styled-components-to-compiled/styled-components-to-compiled.d.ts +0 -3
  171. package/dist/browser/codemods/styled-components-to-compiled/styled-components-to-compiled.js +0 -33
  172. package/dist/browser/codemods/styled-components-to-compiled/styled-components-to-compiled.js.map +0 -1
  173. package/dist/cjs/codemods/codemods-helpers.d.ts +0 -60
  174. package/dist/cjs/codemods/codemods-helpers.js +0 -217
  175. package/dist/cjs/codemods/codemods-helpers.js.map +0 -1
  176. package/dist/cjs/codemods/constants.d.ts +0 -3
  177. package/dist/cjs/codemods/constants.js +0 -7
  178. package/dist/cjs/codemods/constants.js.map +0 -1
  179. package/dist/cjs/codemods/emotion-to-compiled/emotion-to-compiled.d.ts +0 -3
  180. package/dist/cjs/codemods/emotion-to-compiled/emotion-to-compiled.js +0 -180
  181. package/dist/cjs/codemods/emotion-to-compiled/emotion-to-compiled.js.map +0 -1
  182. package/dist/cjs/codemods/emotion-to-compiled/index.d.ts +0 -1
  183. package/dist/cjs/codemods/emotion-to-compiled/index.js +0 -9
  184. package/dist/cjs/codemods/emotion-to-compiled/index.js.map +0 -1
  185. package/dist/cjs/codemods/styled-components-to-compiled/index.d.ts +0 -1
  186. package/dist/cjs/codemods/styled-components-to-compiled/index.js +0 -9
  187. package/dist/cjs/codemods/styled-components-to-compiled/index.js.map +0 -1
  188. package/dist/cjs/codemods/styled-components-to-compiled/styled-components-to-compiled.d.ts +0 -3
  189. package/dist/cjs/codemods/styled-components-to-compiled/styled-components-to-compiled.js +0 -35
  190. package/dist/cjs/codemods/styled-components-to-compiled/styled-components-to-compiled.js.map +0 -1
  191. package/dist/esm/codemods/codemods-helpers.d.ts +0 -60
  192. package/dist/esm/codemods/codemods-helpers.js +0 -201
  193. package/dist/esm/codemods/codemods-helpers.js.map +0 -1
  194. package/dist/esm/codemods/constants.d.ts +0 -3
  195. package/dist/esm/codemods/constants.js +0 -4
  196. package/dist/esm/codemods/constants.js.map +0 -1
  197. package/dist/esm/codemods/emotion-to-compiled/emotion-to-compiled.d.ts +0 -3
  198. package/dist/esm/codemods/emotion-to-compiled/emotion-to-compiled.js +0 -178
  199. package/dist/esm/codemods/emotion-to-compiled/emotion-to-compiled.js.map +0 -1
  200. package/dist/esm/codemods/emotion-to-compiled/index.d.ts +0 -1
  201. package/dist/esm/codemods/emotion-to-compiled/index.js +0 -2
  202. package/dist/esm/codemods/emotion-to-compiled/index.js.map +0 -1
  203. package/dist/esm/codemods/styled-components-to-compiled/index.d.ts +0 -1
  204. package/dist/esm/codemods/styled-components-to-compiled/index.js +0 -2
  205. package/dist/esm/codemods/styled-components-to-compiled/index.js.map +0 -1
  206. package/dist/esm/codemods/styled-components-to-compiled/styled-components-to-compiled.d.ts +0 -3
  207. package/dist/esm/codemods/styled-components-to-compiled/styled-components-to-compiled.js +0 -33
  208. package/dist/esm/codemods/styled-components-to-compiled/styled-components-to-compiled.js.map +0 -1
  209. package/src/codemods/README.md +0 -8
  210. package/src/codemods/codemods-helpers.tsx +0 -369
  211. package/src/codemods/constants.tsx +0 -3
  212. package/src/codemods/emotion-to-compiled/README.md +0 -71
  213. package/src/codemods/emotion-to-compiled/__tests__/emotion-to-compiled.test.tsx +0 -526
  214. package/src/codemods/emotion-to-compiled/emotion-to-compiled.tsx +0 -249
  215. package/src/codemods/emotion-to-compiled/index.tsx +0 -1
  216. package/src/codemods/styled-components-to-compiled/README.md +0 -37
  217. package/src/codemods/styled-components-to-compiled/__tests__/styled-components-to-compiled.test.tsx +0 -109
  218. package/src/codemods/styled-components-to-compiled/index.tsx +0 -1
  219. package/src/codemods/styled-components-to-compiled/styled-components-to-compiled.tsx +0 -45
@@ -1,103 +1,137 @@
1
1
  import React from 'react';
2
+ import type { ComponentType } from 'react';
2
3
  import { render } from '@testing-library/react';
3
- import Style from '../style';
4
4
 
5
5
  jest.mock('../is-node', () => ({
6
6
  isNodeEnvironment: () => false,
7
7
  }));
8
8
 
9
9
  describe('<Style />', () => {
10
+ let consoleErrorSpy: jest.SpyInstance;
11
+
10
12
  beforeEach(() => {
11
- // Reset style tags in head before each test so that it will remove styles
12
- // injected by test
13
- document.head.querySelectorAll('style').forEach((styleElement) => {
14
- styleElement.textContent = '';
15
- });
13
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
14
+ });
15
+
16
+ afterEach(() => {
17
+ consoleErrorSpy.mockRestore();
18
+ document.head.innerHTML = '';
16
19
  });
17
20
 
21
+ // We want to isolate the test to correctly mimic the environment being loaded in once
22
+ const createIsolatedTest = (callback: (Style: ComponentType) => void) => {
23
+ jest.isolateModules(() => {
24
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
25
+ const Style = require('../style');
26
+
27
+ callback(Style.default);
28
+ });
29
+ };
30
+
18
31
  it('should render nothing on the client', () => {
19
- const { baseElement } = render(<Style>{[`.a { display: block; }`]}</Style>);
32
+ createIsolatedTest((Style) => {
33
+ const { baseElement } = render(<Style>{[`.a { display: block; }`]}</Style>);
20
34
 
21
- expect(baseElement.getElementsByTagName('style')).toHaveLength(0);
35
+ expect(baseElement.getElementsByTagName('style')).toHaveLength(0);
36
+ expect(console.error).not.toHaveBeenCalled();
37
+ });
22
38
  });
23
39
 
24
40
  it('should add style to the head on the client', () => {
25
- render(<Style>{[`.b { display: block; }`]}</Style>);
41
+ createIsolatedTest((Style) => {
42
+ render(<Style>{[`.b { display: block; }`]}</Style>);
26
43
 
27
- expect(document.head.innerHTML).toInclude('<style>.b { display: block; }</style>');
44
+ expect(document.head.innerHTML).toInclude('<style>.b { display: block; }</style>');
45
+ expect(console.error).not.toHaveBeenCalled();
46
+ });
28
47
  });
29
48
 
30
49
  it('should only add one style if it was already added', () => {
31
- render(<Style>{[`.c { display: block; }`]}</Style>);
32
- render(<Style>{[`.c { display: block; }`]}</Style>);
50
+ createIsolatedTest((Style) => {
51
+ render(<Style>{[`.c { display: block; }`]}</Style>);
52
+ render(<Style>{[`.c { display: block; }`]}</Style>);
33
53
 
34
- expect(document.head.innerHTML).toIncludeRepeated('<style>.c { display: block; }</style>', 1);
54
+ expect(document.head.innerHTML).toIncludeRepeated('<style>.c { display: block; }</style>', 1);
55
+ expect(console.error).not.toHaveBeenCalled();
56
+ });
35
57
  });
36
58
 
37
59
  it('should noop in prod', () => {
38
- jest.spyOn(console, 'error');
39
- process.env.NODE_ENV = 'production';
60
+ createIsolatedTest((Style) => {
61
+ process.env.NODE_ENV = 'production';
40
62
 
41
- render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
63
+ render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
42
64
 
43
- expect(console.error).not.toHaveBeenCalled();
65
+ expect(console.error).not.toHaveBeenCalled();
66
+ });
44
67
  });
45
68
 
46
69
  it('should warn in dev when using a dangerous pseduo selector', () => {
47
- jest.spyOn(console, 'error');
48
- process.env.NODE_ENV = 'development';
70
+ createIsolatedTest((Style) => {
71
+ process.env.NODE_ENV = 'development';
49
72
 
50
- render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
73
+ render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
51
74
 
52
- expect(console.error).toHaveBeenCalled();
75
+ expect(console.error).toHaveBeenCalledTimes(1);
76
+ });
53
77
  });
54
78
 
55
79
  it('should warn in dev only once', () => {
56
- jest.spyOn(console, 'error');
57
- process.env.NODE_ENV = 'development';
80
+ createIsolatedTest((Style) => {
81
+ process.env.NODE_ENV = 'development';
58
82
 
59
- render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
60
- render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
83
+ render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
84
+ render(<Style>{[`.c:first-child { display: block; }`]}</Style>);
61
85
 
62
- expect(console.error).toHaveBeenCalledTimes(1);
86
+ expect(console.error).toHaveBeenCalledTimes(1);
87
+ expect(console.error).toHaveBeenCalledWith(
88
+ expect.stringMatching('Selectors ":first-child, :nth-child" are dangerous to use')
89
+ );
90
+ });
63
91
  });
64
92
 
65
93
  it('should render style tags in buckets', () => {
66
- render(
67
- <Style>
68
- {[
69
- `._a1234567:hover{ color: red; }`,
70
- `._b1234567:active{ color: blue; }`,
71
- `._c1234567:link{ color: green; }`,
72
- `._d1234567{ display: block; }`,
73
- `@media (max-width: 800px){ ._e1234567{ color: yellow; } }`,
74
- `._f1234567:focus{ color: pink; }`,
75
- `._g1234567:visited{ color: grey; }`,
76
- `._h1234567:focus-visible{ color: white; }`,
77
- `._i1234567:focus-within{ color: black; }`,
78
- ]}
79
- </Style>
80
- );
81
-
82
- expect(document.head.innerHTML.split('</style>').join('</style>\n')).toMatchInlineSnapshot(`
83
- "<style>._d1234567{ display: block; }</style>
84
- <style>._c1234567:link{ color: green; }</style>
85
- <style>._g1234567:visited{ color: grey; }</style>
86
- <style>._i1234567:focus-within{ color: black; }</style>
87
- <style>._f1234567:focus{ color: pink; }</style>
88
- <style>._h1234567:focus-visible{ color: white; }</style>
89
- <style>._a1234567:hover{ color: red; }</style>
90
- <style>._b1234567:active{ color: blue; }</style>
91
- <style>@media (max-width: 800px){ ._e1234567{ color: yellow; } }</style>
92
- "
93
- `);
94
+ createIsolatedTest((Style) => {
95
+ render(
96
+ <Style>
97
+ {[
98
+ `._a1234567:hover{ color: red; }`,
99
+ `._b1234567:active{ color: blue; }`,
100
+ `._c1234567:link{ color: green; }`,
101
+ `._d1234567{ display: block; }`,
102
+ `@media (max-width: 800px){ ._e1234567{ color: yellow; } }`,
103
+ `._f1234567:focus{ color: pink; }`,
104
+ `._g1234567:visited{ color: grey; }`,
105
+ `._h1234567:focus-visible{ color: white; }`,
106
+ `._i1234567:focus-within{ color: black; }`,
107
+ ]}
108
+ </Style>
109
+ );
110
+
111
+ expect(document.head.innerHTML.split('</style>').join('</style>\n')).toMatchInlineSnapshot(`
112
+ "<style>._d1234567{ display: block; }</style>
113
+ <style>._c1234567:link{ color: green; }</style>
114
+ <style>._g1234567:visited{ color: grey; }</style>
115
+ <style>._i1234567:focus-within{ color: black; }</style>
116
+ <style>._f1234567:focus{ color: pink; }</style>
117
+ <style>._h1234567:focus-visible{ color: white; }</style>
118
+ <style>._a1234567:hover{ color: red; }</style>
119
+ <style>._b1234567:active{ color: blue; }</style>
120
+ <style>@media (max-width: 800px){ ._e1234567{ color: yellow; } }</style>
121
+ "
122
+ `);
123
+ expect(console.error).not.toHaveBeenCalled();
124
+ });
94
125
  });
95
126
 
96
127
  it('should update styles', () => {
97
- const { rerender } = render(<Style>{[`.first-render { display: block; }`]}</Style>);
128
+ createIsolatedTest((Style) => {
129
+ const { rerender } = render(<Style>{[`.first-render { display: block; }`]}</Style>);
98
130
 
99
- rerender(<Style>{[`.second-render { display: block; }`]}</Style>);
131
+ rerender(<Style>{[`.second-render { display: block; }`]}</Style>);
100
132
 
101
- expect(document.head.innerHTML).toInclude('.second-render { display: block; }');
133
+ expect(document.head.innerHTML).toInclude('.second-render { display: block; }');
134
+ expect(console.error).not.toHaveBeenCalled();
135
+ });
102
136
  });
103
137
  });
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Flowtype definitions for ax
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ /**
8
+ * Joins classes together and ensures atomic declarations of a single group exist.
9
+ * Atomic declarations take the form of `_{group}{value}` (always prefixed with an underscore),
10
+ * where both `group` and `value` are hashes **four characters long**.
11
+ * Class names can be of any length,
12
+ * this function can take both atomic declarations and class names.
13
+ *
14
+ * Input:
15
+ *
16
+ * ```
17
+ * ax(['_aaaabbbb', '_aaaacccc'])
18
+ * ```
19
+ *
20
+ * Output:
21
+ *
22
+ * ```
23
+ * '_aaaacccc'
24
+ * ```
25
+ * @param classes
26
+ */
27
+ declare export default function ax(classNames: (string | void | false)[]): string | void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Flowtype definitions for css-custom-property
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ /**
8
+ * Returns a CSS custom property value with an optional suffix & prefix.
9
+ * Prefix will only be added if there is a suffix.
10
+ * If the value is undefined a fallback value will be returned to prevent children inheriting parent values.
11
+ * @param value
12
+ * @param suffix
13
+ * @param prefix
14
+ */
15
+ declare export default function cssCustomPropertyValue(
16
+ value: string | number | number | null,
17
+ suffix?: string | void | null,
18
+ prefix?: string | void | null
19
+ ): string | number;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Flowtype definitions for dev-warnings
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ declare export var analyzeCssInDev: (sheet: string) => void;
@@ -1,7 +1,7 @@
1
1
  const selectorsToWarn = [':first-child', ':nth-child'];
2
2
  const hasWarned: Record<string, true> = {};
3
3
 
4
- export const warn = (str: string, ...args: any[]): void =>
4
+ const warn = (str: string, ...args: any[]): void =>
5
5
  console.error(
6
6
  `
7
7
  ██████╗ ██████╗ ███╗ ███╗██████╗ ██╗██╗ ███████╗██████╗
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Flowtype definitions for index
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ declare export { default as CS } from './style';
8
+ declare export { default as CC } from './style-cache';
9
+ declare export { default as ax } from './ax';
10
+ declare export { default as ix } from './css-custom-property';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Flowtype definitions for is-node
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ /**
8
+ * Returns `true` when inside a node environment,
9
+ * else `false`.
10
+ *
11
+ * When using this it will remove any node code from the browser bundle - for example:
12
+ *
13
+ * ```js
14
+ * if (isNodeEnvironment()) {
15
+ * // This code will be removed from the browser bundle
16
+ * }
17
+ * ```
18
+ */
19
+ declare export var isNodeEnvironment: () => boolean;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Flowtype definitions for sheet
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ import type { StyleSheetOpts, Bucket } from './types';
8
+ /**
9
+ * Ordered style buckets using their short psuedo name.
10
+ * If changes are needed make sure that it aligns with the definition in `sort-at-rule-pseudos.tsx`.
11
+ */
12
+ declare export var styleBucketOrdering: Bucket[];
13
+ /**
14
+ * Gets the bucket depending on the sheet.
15
+ * This function makes assumptions as to the form of the input class name.
16
+ *
17
+ * Input:
18
+ *
19
+ * ```
20
+ * "._a1234567:hover{ color: red; }"
21
+ * ```
22
+ *
23
+ * Output:
24
+ *
25
+ * ```
26
+ * "h"
27
+ * ```
28
+ * @param sheet styles for which we are getting the bucket
29
+ */
30
+ declare export var getStyleBucketName: (sheet: string) => Bucket;
31
+ /**
32
+ * Used to move styles to the head of the application during runtime.
33
+ * @param css string
34
+ * @param opts StyleSheetOpts
35
+ */
36
+ declare export default function insertRule(css: string, opts: StyleSheetOpts): void;
@@ -1,4 +1,4 @@
1
- import { StyleSheetOpts, Bucket } from './types';
1
+ import type { StyleSheetOpts, Bucket } from './types';
2
2
 
3
3
  /**
4
4
  * Ordered style buckets using their short psuedo name.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Flowtype definitions for style-cache
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ import type { ProviderComponent, UseCacheHook } from './types';
8
+ /**
9
+ * Hook using the cache created on the server or client.
10
+ */
11
+ declare export var useCache: UseCacheHook;
12
+ /**
13
+ * On the server this ensures the minimal amount of styles will be rendered
14
+ * safely using React Context.
15
+ *
16
+ * On the browser this turns into a fragment with no React Context.
17
+ */
18
+ declare var StyleCacheProvider: ProviderComponent;
19
+ declare export default typeof StyleCacheProvider;
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { createContext, useContext } from 'react';
3
3
  import { isNodeEnvironment } from './is-node';
4
- import { ProviderComponent, UseCacheHook } from './types';
4
+ import type { ProviderComponent, UseCacheHook } from './types';
5
5
 
6
6
  /**
7
7
  * Cache to hold already used styles.
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Flowtype definitions for style
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ import type { StyleSheetOpts } from './types';
8
+ declare type StyleProps = {
9
+ /**
10
+ * CSS Rules.
11
+ * Ensure each rule is a separate element in the array.
12
+ */
13
+ children: string[],
14
+ ...
15
+ } & StyleSheetOpts;
16
+ declare export default function Style(props: StyleProps): React$Node | null;
17
+ declare export {};
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import insertRule, { getStyleBucketName, styleBucketOrdering } from './sheet';
3
3
  import { analyzeCssInDev } from './dev-warnings';
4
- import { StyleSheetOpts, Bucket } from './types';
4
+ import type { StyleSheetOpts, Bucket } from './types';
5
5
  import { useCache } from './style-cache';
6
6
  import { isNodeEnvironment } from './is-node';
7
7
 
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Flowtype definitions for types
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ export interface StyleSheetOpts {
8
+ /**
9
+ * Used to set a nonce on the style element.
10
+ * This is needed when using a strict CSP and should be a random hash generated every server load.
11
+ * Check out https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src for more information.
12
+ */
13
+ nonce?: string;
14
+ }
15
+ /**
16
+ * Buckets under which we will group our stylesheets
17
+ */
18
+ export type Bucket = '' | 'l' | 'v' | 'w' | 'f' | 'i' | 'h' | 'a' | 'm';
19
+ export type UseCacheHook = () => { [key: string]: true, ... };
20
+ export type ProviderComponent = (props: {
21
+ children: React$Node[] | React$Node,
22
+ ...
23
+ }) => React$Node;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Flowtype definitions for runtime
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ declare export { CC, CS, ax, ix } from './runtime/index';
@@ -0,0 +1,30 @@
1
+ // @flow strict-local
2
+ import React, { type Node } from 'react';
3
+ import { styled, type CssObject, type CSSProps } from '@compiled/react';
4
+
5
+ // Tagged template expression
6
+ () => {
7
+ const StyledTaggedTemplateExpression = styled.div`
8
+ font-size: 12px;
9
+ `;
10
+ return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
11
+ };
12
+
13
+ // Object call expression
14
+ () => {
15
+ const StyledTaggedTemplateExpression = styled.div({ fontSize: 12 });
16
+ return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
17
+ };
18
+
19
+ // Array
20
+ () => {
21
+ const styles: CSSProps[] = [{ fontSize: '12px' }];
22
+ const StyledTaggedTemplateExpression = styled.div(styles);
23
+ return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
24
+ };
25
+
26
+ // Multiple arguments
27
+ () => {
28
+ const StyledTaggedTemplateExpression = styled.div({ fontSize: 12 }, `font-size: 12px`);
29
+ return <StyledTaggedTemplateExpression>red text</StyledTaggedTemplateExpression>;
30
+ };
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Flowtype definitions for index
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
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>>;
13
+ /**
14
+ * Extra props added to the output Styled Component.
15
+ */
16
+ export type StyledProps = {
17
+ as?: $Keys<$JSXIntrinsics>,
18
+ };
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 }>;
45
+ }
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
+ */
51
+ <TInheritedProps: mixed>(
52
+ Component: ComponentType<TInheritedProps>
53
+ ): StyledFunctionFromComponent<TInheritedProps>,
54
+ ...
55
+ } & StyledComponentMap;
56
+ /**
57
+ * Create a component that ties styles to an element which comes with built-in behavior such as `ref` and `as` prop support.
58
+ *
59
+ * ```
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
64
+ * ```
65
+ *
66
+ * For more help, read the docs:
67
+ * https://compiledcssinjs.com/docs/api-styled
68
+ */
69
+ declare export var styled: StyledComponentInstantiator;
@@ -1,15 +1,11 @@
1
- import { ComponentType } from 'react';
1
+ import type { ComponentType } from 'react';
2
2
  import { createSetupError } from '../utils/error';
3
- import { CssFunction, BasicTemplateInterpolations } from '../types';
4
-
5
- export interface FunctionIterpolation<TProps> {
6
- (props: TProps): string | number | undefined;
7
- }
3
+ import type { BasicTemplateInterpolations, CssFunction, FunctionInterpolation } from '../types';
8
4
 
9
5
  /**
10
6
  * Typing for the CSS object.
11
7
  */
12
- export type CssObject<TProps> = CssFunction<FunctionIterpolation<TProps>>;
8
+ export type CssObject<TProps> = CssFunction<FunctionInterpolation<TProps>>;
13
9
 
14
10
  /**
15
11
  * Extra props added to the output Styled Component.
@@ -20,7 +16,7 @@ export interface StyledProps {
20
16
 
21
17
  export type Interpolations<TProps extends unknown> = (
22
18
  | BasicTemplateInterpolations
23
- | FunctionIterpolation<TProps>
19
+ | FunctionInterpolation<TProps>
24
20
  | CssObject<TProps>
25
21
  | CssObject<TProps>[]
26
22
  )[];
@@ -34,7 +30,7 @@ export interface StyledFunctionFromTag<TTag extends keyof JSX.IntrinsicElements>
34
30
  <TProps extends unknown>(
35
31
  // Allows either string or object (`` or ({}))
36
32
  css: CssObject<TProps> | CssObject<TProps>[],
37
- ...interpoltations: Interpolations<TProps>
33
+ ...interpolations: Interpolations<TProps>
38
34
  ): React.ComponentType<TProps & JSX.IntrinsicElements[TTag] & StyledProps>;
39
35
  }
40
36
 
@@ -42,7 +38,7 @@ export interface StyledFunctionFromComponent<TInheritedProps extends unknown> {
42
38
  <TProps extends unknown>(
43
39
  // Allows either string or object (`` or ({}))
44
40
  css: CssObject<TProps> | TemplateStringsArray,
45
- ...interpoltations: Interpolations<TProps>
41
+ ...interpolations: Interpolations<TProps>
46
42
  ): React.ComponentType<TProps & StyledProps & TInheritedProps>;
47
43
  }
48
44
 
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Flowtype definitions for types
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ import * as CSS from 'csstype';
8
+ /**
9
+ * Typing for the interpolations.
10
+ */
11
+ export type BasicTemplateInterpolations = string | number;
12
+ export interface FunctionInterpolation<TProps> {
13
+ (props: TProps): CSSProps | BasicTemplateInterpolations | boolean | void;
14
+ }
15
+ /**
16
+ * These are all the CSS props that will exist.
17
+ */
18
+ export type CSSProps = CSS.Properties<BasicTemplateInterpolations>;
19
+ export type AnyKeyCssProps<TValue> = {
20
+ [key: string]: AnyKeyCssProps<TValue> | CSSProps | BasicTemplateInterpolations | TValue,
21
+ ...
22
+ };
23
+ export type CssFunction<TValue = void> =
24
+ | CSSProps
25
+ | AnyKeyCssProps<TValue>
26
+ | $ReadOnlyArray<string>
27
+ | string
28
+ | boolean
29
+ | void;
package/src/types.tsx CHANGED
@@ -1,17 +1,21 @@
1
- import * as CSS from 'csstype';
1
+ import type * as CSS from 'csstype';
2
2
 
3
3
  /**
4
4
  * Typing for the interpolations.
5
5
  */
6
6
  export type BasicTemplateInterpolations = string | number;
7
7
 
8
+ export interface FunctionInterpolation<TProps> {
9
+ (props: TProps): CSSProps | BasicTemplateInterpolations | boolean | undefined;
10
+ }
11
+
8
12
  /**
9
13
  * These are all the CSS props that will exist.
10
14
  */
11
- export type CSSProps = CSS.Properties<string | number>;
15
+ export type CSSProps = CSS.Properties<BasicTemplateInterpolations>;
12
16
 
13
17
  export type AnyKeyCssProps<TValue> = {
14
- [key: string]: AnyKeyCssProps<TValue> | CSSProps | string | number | TValue;
18
+ [key: string]: AnyKeyCssProps<TValue> | CSSProps | BasicTemplateInterpolations | TValue;
15
19
  };
16
20
 
17
21
  export type CssFunction<TValue = void> =
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Flowtype definitions for error
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.15.0
5
+ * @flow
6
+ */
7
+ declare export var createSetupError: () => Error;