eslint-plugin-primer-react 8.0.0 → 8.1.0-rc.ce584c0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # eslint-plugin-primer-react
2
2
 
3
+ ## 8.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#382](https://github.com/primer/eslint-plugin-primer-react/pull/382) [`93e4b76`](https://github.com/primer/eslint-plugin-primer-react/commit/93e4b76269bf816bfc24991180f73ef22266a6f5) Thanks [@jonrohan](https://github.com/jonrohan)! - Add rule `use-styled-react-import` to enforce importing components with sx prop from @primer/styled-react
8
+
3
9
  ## 8.0.0
4
10
 
5
11
  ### Major Changes
@@ -0,0 +1,128 @@
1
+ # use-styled-react-import
2
+
3
+ 💼 This rule is _disabled_ in the ✅ `recommended` config.
4
+
5
+ 🔧 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix).
6
+
7
+ <!-- end auto-generated rule header -->
8
+
9
+ Enforce importing components that use `sx` prop from `@primer/styled-react` instead of `@primer/react`, and vice versa.
10
+
11
+ ## Rule Details
12
+
13
+ This rule detects when certain Primer React components are used with the `sx` prop and ensures they are imported from the temporary `@primer/styled-react` package instead of `@primer/react`. When the same components are used without the `sx` prop, it ensures they are imported from `@primer/react` instead of `@primer/styled-react`.
14
+
15
+ When a component is used both with and without the `sx` prop in the same file, the rule will import the styled version with an alias (e.g., `StyledButton`) and update the JSX usage accordingly to avoid naming conflicts.
16
+
17
+ It also moves certain types and utilities to the styled-react package.
18
+
19
+ ### Components that should be imported from `@primer/styled-react` when used with `sx`:
20
+
21
+ - ActionList
22
+ - ActionMenu
23
+ - Box
24
+ - Breadcrumbs
25
+ - Button
26
+ - Flash
27
+ - FormControl
28
+ - Heading
29
+ - IconButton
30
+ - Label
31
+ - Link
32
+ - LinkButton
33
+ - PageLayout
34
+ - Text
35
+ - TextInput
36
+ - Truncate
37
+ - Octicon
38
+ - Dialog
39
+
40
+ ### Types and utilities that should always be imported from `@primer/styled-react`:
41
+
42
+ - `BoxProps` (type)
43
+ - `SxProp` (type)
44
+ - `BetterSystemStyleObject` (type)
45
+ - `sx` (utility)
46
+
47
+ ## Examples
48
+
49
+ ### ❌ Incorrect
50
+
51
+ ```jsx
52
+ import {Button, Link} from '@primer/react'
53
+
54
+ const Component = () => <Button sx={{color: 'red'}}>Click me</Button>
55
+ ```
56
+
57
+ ```jsx
58
+ import {Box} from '@primer/react'
59
+
60
+ const Component = () => <Box sx={{padding: 2}}>Content</Box>
61
+ ```
62
+
63
+ ```jsx
64
+ import {sx} from '@primer/react'
65
+ ```
66
+
67
+ ```jsx
68
+ import {Button} from '@primer/styled-react'
69
+
70
+ const Component = () => <Button>Click me</Button>
71
+ ```
72
+
73
+ ```jsx
74
+ import {Button} from '@primer/react'
75
+
76
+ const Component1 = () => <Button>Click me</Button>
77
+ const Component2 = () => <Button sx={{color: 'red'}}>Styled me</Button>
78
+ ```
79
+
80
+ ### ✅ Correct
81
+
82
+ ```jsx
83
+ import {Link} from '@primer/react'
84
+ import {Button} from '@primer/styled-react'
85
+
86
+ const Component = () => <Button sx={{color: 'red'}}>Click me</Button>
87
+ ```
88
+
89
+ ```jsx
90
+ import {Box} from '@primer/styled-react'
91
+
92
+ const Component = () => <Box sx={{padding: 2}}>Content</Box>
93
+ ```
94
+
95
+ ```jsx
96
+ import {sx} from '@primer/styled-react'
97
+ ```
98
+
99
+ ```jsx
100
+ // Components without sx prop can stay in @primer/react
101
+ import {Button} from '@primer/react'
102
+
103
+ const Component = () => <Button>Click me</Button>
104
+ ```
105
+
106
+ ```jsx
107
+ // Components imported from styled-react but used without sx prop should be moved back
108
+ import {Button} from '@primer/react'
109
+
110
+ const Component = () => <Button>Click me</Button>
111
+ ```
112
+
113
+ ```jsx
114
+ // When a component is used both ways, use an alias for the styled version
115
+ import {Button} from '@primer/react'
116
+ import {Button as StyledButton} from '@primer/styled-react'
117
+
118
+ const Component1 = () => <Button>Click me</Button>
119
+ const Component2 = () => <StyledButton sx={{color: 'red'}}>Styled me</StyledButton>
120
+ ```
121
+
122
+ ## Options
123
+
124
+ This rule has no options.
125
+
126
+ ## When Not To Use It
127
+
128
+ This rule is specifically for migrating components that use the `sx` prop to the temporary `@primer/styled-react` package. If you're not using the `sx` prop or not participating in this migration, you can disable this rule.