1 module.exports = {
2 root: true,
3 ignorePatterns: ['.cache/', 'public/'],
4 plugins: ['primer-react'], // github plugin now comes from flat config
5 extends: ['@npmcli', 'react-app', 'eslint:recommended', 'plugin:react/recommended', 'prettier'],
6 rules: {
7 'max-len': 'off',
8 'react/prop-types': 'off',
9 'primer-react/direct-slot-children': 'error',
10 'primer-react/no-system-props': ['error', {includeUtilityComponents: true}],
11 'primer-react/a11y-tooltip-interactive-trigger': 'error',
12 'primer-react/new-color-css-vars': 'error',
13 'primer-react/a11y-explicit-heading': 'error',
14 'primer-react/no-deprecated-props': 'warn',
15 'primer-react/a11y-remove-disable-tooltip': 'error',
16 'primer-react/a11y-use-accessible-tooltip': 'error',
17 },
18 settings: {
19 'import/resolver': {
20 typescript: {},
21 },
22 },
23 overrides: [
24 {
25 files: ['*.js'],
26 extends: ['plugin:import/recommended'],
27 },
28 {
29 files: ['src/shared.js'],
30 rules: {
31 'react/no-unescaped-entities': 'off',
32 },
33 },
34 {
35 files: ['*.mdx'],
36 plugins: ['mdx', 'prettier'],
37 extends: ['plugin:mdx/recommended'],
38 parserOptions: {
39 sourceType: 'module',
40 },
41 globals: {
42 Index: 'readonly',
43 Note: 'readonly',
44 Prompt: 'readonly',
45 Screenshot: 'readonly',
46 Link: 'readonly',
47 YouTube: 'readonly',
48 DataTable: 'readonly',
49 InlineCode: 'readonly',
50 Strikethrough: 'readonly',
51 CliLink: 'readonly',
52 },
53 settings: {
54 'import/resolver': 'webpack',
55 },
56 rules: {
57 'no-irregular-whitespace': 'off',
58 'react/no-unescaped-entities': 'off',
59 'react/jsx-key': 'off',
60 },
61 },
62 {
63 files: ['*.mdx', 'src/shared.js', 'src/**/*.js'],
64 rules: {
65 'react/forbid-elements': [
66 'error',
67 {
68 // See https://github.com/npm/documentation/pull/791
69 // https://gist.githubusercontent.com/cecchi/99772a8483914b112400/raw/bcaecc4ba809caec518158bb46f9dead456ae5da/html-tags.json
70 forbid: [
71 'abbr',
72 'acronym',
73 'address',
74 'applet',
75 'area',
76 'article',
77 'audio',
78 'b',
79 'base',
80 'basefont',
81 'bdi',
82 'bdo',
83 'big',
84 'blink',
85 'br',
86 'button',
87 'canvas',
88 'caption',
89 'center',
90 'cite',
91 'code',
92 'col',
93 'colgroup',
94 'content',
95 'data',
96 'datalist',
97 'dd',
98 'del',
99 'details',
100 'dfn',
101 'dialog',
102 'dir',
103 // ok because Box is deprecated and styles are provided via CSS modules
104 // 'div',
105 'dl',
106 'dt',
107 'element',
108 'em',
109 'embed',
110 'fieldset',
111 'figcaption',
112 'figure',
113 'footer',
114 'form',
115 'frame',
116 'frameset',
117 'h1',
118 'h2',
119 'h3',
120 'h4',
121 'h5',
122 'h6',
123 'head',
124 // ok because Box is deprecated and styles are provided via CSS modules
125 // 'header',
126 'hgroup',
127 'hr',
128 // used in head
129 // 'html',
130 'i',
131 // ok because Box is deprecated and styles are provided via CSS modules
132 // 'iframe',
133 'input',
134 'ins',
135 'isindex',
136 'kbd',
137 'keygen',
138 'label',
139 'legend',
140 // ok because there is no mdx replacement and styles are provided via parent ul/ol
141 // 'li',
142 'listing',
143 // ok because Box is deprecated and styles are provided via CSS modules
144 // 'main',
145 'map',
146 'mark',
147 'menu',
148 'menuitem',
149 'meter',
150 // ok because Box is deprecated and styles are provided via CSS modules
151 // 'nav',
152 'noembed',
153 'noscript',
154 'object',
155 'ol',
156 'optgroup',
157 'option',
158 'output',
159 // ok because Box is deprecated and styles are provided via CSS modules
160 // 'p',
161 'param',
162 'plaintext',
163 // ok because Box is deprecated and styles are provided via CSS modules
164 // 'pre',
165 'progress',
166 'q',
167 'rp',
168 'rt',
169 'rtc',
170 'ruby',
171 's',
172 'samp',
173 'script',
174 'section',
175 'select',
176 'shadow',
177 'small',
178 'source',
179 'spacer',
180 'span',
181 'strike',
182 // ok since there is no mdx replacement
183 // 'strong'
184 'style',
185 'sub',
186 'summary',
187 'sup',
188 'table',
189 'tbody',
190 'td',
191 'template',
192 'tfoot',
193 'th',
194 'thead',
195 'time',
196 // used in head
197 // 'title',
198 'tr',
199 'track',
200 'tt',
201 'u',
202 // ok because Box is deprecated and styles are provided via CSS modules
203 // 'ul',
204 'var',
205 'video',
206 'wbr',
207 'xmp',
208 ],
209 },
210 ],
211 },
212 },
213 ],
214 }