eslint-plugin-primer-react 4.0.3 → 4.0.4-rc.5058fcb

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 (46) hide show
  1. package/.changeset/README.md +3 -3
  2. package/.eslintrc.js +39 -0
  3. package/.github/dependabot.yml +11 -5
  4. package/.github/workflows/add-to-inbox.yml +33 -0
  5. package/.github/workflows/ci.yml +34 -18
  6. package/.github/workflows/release.yml +2 -2
  7. package/.github/workflows/release_canary.yml +8 -5
  8. package/.github/workflows/release_candidate.yml +4 -4
  9. package/.markdownlint-cli2.cjs +26 -0
  10. package/.nvmrc +1 -0
  11. package/.prettierignore +3 -0
  12. package/CHANGELOG.md +7 -1
  13. package/README.md +4 -2
  14. package/docs/rules/a11y-explicit-heading.md +17 -7
  15. package/docs/rules/a11y-tooltip-interactive-trigger.md +6 -2
  16. package/docs/rules/direct-slot-children.md +49 -46
  17. package/docs/rules/new-color-css-vars-have-fallback.md +25 -0
  18. package/docs/rules/new-css-color-vars.md +19 -14
  19. package/docs/rules/no-deprecated-colors.md +91 -82
  20. package/docs/rules/no-system-props.md +12 -5
  21. package/package-lock.json +15583 -0
  22. package/package.json +22 -14
  23. package/src/configs/components.js +19 -19
  24. package/src/configs/recommended.js +9 -8
  25. package/src/index.js +4 -3
  26. package/src/rules/__tests__/a11y-explicit-heading.test.js +22 -25
  27. package/src/rules/__tests__/a11y-tooltip-interactive-trigger.test.js +43 -43
  28. package/src/rules/__tests__/direct-slot-children.test.js +36 -36
  29. package/src/rules/__tests__/new-color-css-vars.test.js +612 -44
  30. package/src/rules/__tests__/new-css-vars-have-fallback.test.js +31 -0
  31. package/src/rules/__tests__/no-deprecated-colors.test.js +66 -66
  32. package/src/rules/__tests__/no-system-props.test.js +51 -51
  33. package/src/rules/a11y-explicit-heading.js +16 -13
  34. package/src/rules/a11y-tooltip-interactive-trigger.js +21 -22
  35. package/src/rules/direct-slot-children.js +11 -11
  36. package/src/rules/new-color-css-vars-have-fallback.js +87 -0
  37. package/src/rules/new-color-css-vars.js +97 -83
  38. package/src/rules/no-deprecated-colors.js +15 -15
  39. package/src/rules/no-system-props.js +21 -21
  40. package/src/url.js +1 -1
  41. package/src/utils/__tests__/flatten-components.test.js +13 -13
  42. package/src/utils/css-variable-map.json +538 -184
  43. package/src/utils/flatten-components.js +11 -11
  44. package/src/utils/is-imported-from.js +1 -1
  45. package/src/utils/new-color-css-vars-map.json +326 -0
  46. /package/.github/{workflows/CODEOWNERS → CODEOWNERS} +0 -0
package/package.json CHANGED
@@ -1,11 +1,15 @@
1
1
  {
2
2
  "name": "eslint-plugin-primer-react",
3
- "version": "4.0.3",
3
+ "version": "4.0.4-rc.5058fcb",
4
4
  "description": "ESLint rules for Primer React",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
7
- "test": "jest",
8
- "release": "changeset publish"
7
+ "format": "prettier --cache --write '**/*.{js,css,md,mdx,ts,tsx,yml}'",
8
+ "format:check": "prettier --cache --list-different '**/*.{js,css,md,mdx,ts,tsx,yml}'",
9
+ "lint": "eslint .",
10
+ "lint:md": "markdownlint-cli2 \"**/*.{md,mdx}\" \"!.github\" \"!.changeset\" \"!node_modules\" \"!CHANGELOG.md\"",
11
+ "release": "changeset publish",
12
+ "test": "jest"
9
13
  },
10
14
  "repository": {
11
15
  "type": "git",
@@ -20,25 +24,29 @@
20
24
  "url": "https://github.com/primer/eslint-plugin-primer-react/issues"
21
25
  },
22
26
  "homepage": "https://github.com/primer/eslint-plugin-primer-react#readme",
23
- "devDependencies": {
24
- "@changesets/changelog-github": "^0.4.0",
25
- "@changesets/cli": "^2.16.0",
26
- "@github/prettier-config": "0.0.4",
27
- "@primer/primitives": "^7.14.0",
28
- "eslint": "^8.42.0",
29
- "jest": "^27.0.6"
30
- },
31
27
  "peerDependencies": {
32
28
  "@primer/primitives": ">=4.6.2",
33
29
  "eslint": "^8.42.0"
34
30
  },
35
- "prettier": "@github/prettier-config",
36
31
  "dependencies": {
37
32
  "@styled-system/props": "^5.1.5",
38
- "eslint-plugin-github": "^4.9.2",
39
33
  "eslint-plugin-jsx-a11y": "^6.7.1",
40
34
  "eslint-traverse": "^1.0.0",
41
35
  "lodash": "^4.17.21",
42
36
  "styled-system": "^5.1.5"
43
- }
37
+ },
38
+ "devDependencies": {
39
+ "@changesets/changelog-github": "^0.4.0",
40
+ "@changesets/cli": "^2.16.0",
41
+ "@github/markdownlint-github": "^0.6.0",
42
+ "@github/prettier-config": "0.0.6",
43
+ "@primer/primitives": "^7.14.0",
44
+ "eslint": "^8.42.0",
45
+ "eslint-plugin-github": "^4.10.1",
46
+ "eslint-plugin-prettier": "^5.0.1",
47
+ "jest": "^29.7.0",
48
+ "markdownlint-cli2": "^0.11.0",
49
+ "markdownlint-cli2-formatter-pretty": "^0.0.5"
50
+ },
51
+ "prettier": "@github/prettier-config"
44
52
  }
@@ -1,23 +1,23 @@
1
- const { flattenComponents } = require('../utils/flatten-components');
1
+ const {flattenComponents} = require('../utils/flatten-components')
2
2
 
3
3
  const components = flattenComponents({
4
- Button: 'button',
5
- IconButton: 'button',
6
- ToggleSwitch: 'button',
7
- Radio: 'input',
8
- Checkbox: 'input',
9
- Text: 'span',
10
- TextInput: {
11
- Action: 'button',
12
- self: 'input',
13
- },
14
- Select: {
15
- Option: 'option',
16
- self: 'select',
17
- },
18
- TabNav: {
19
- self: 'nav',
20
- },
4
+ Button: 'button',
5
+ IconButton: 'button',
6
+ ToggleSwitch: 'button',
7
+ Radio: 'input',
8
+ Checkbox: 'input',
9
+ Text: 'span',
10
+ TextInput: {
11
+ Action: 'button',
12
+ self: 'input',
13
+ },
14
+ Select: {
15
+ Option: 'option',
16
+ self: 'select',
17
+ },
18
+ TabNav: {
19
+ self: 'nav',
20
+ },
21
21
  })
22
22
 
23
- module.exports = components;
23
+ module.exports = components
@@ -1,11 +1,11 @@
1
- const components = require('./components');
1
+ const components = require('./components')
2
2
 
3
3
  module.exports = {
4
4
  parserOptions: {
5
5
  sourceType: 'module',
6
6
  ecmaFeatures: {
7
- jsx: true
8
- }
7
+ jsx: true,
8
+ },
9
9
  },
10
10
  plugins: ['primer-react', 'github'],
11
11
  extends: ['plugin:github/react'],
@@ -15,14 +15,15 @@ module.exports = {
15
15
  'primer-react/no-system-props': 'warn',
16
16
  'primer-react/a11y-tooltip-interactive-trigger': 'error',
17
17
  'primer-react/new-color-css-vars': 'error',
18
- 'primer-react/a11y-explicit-heading': 'error'
18
+ 'primer-react/a11y-explicit-heading': 'error',
19
+ 'primer-react/new-color-css-vars-have-fallback': 'error',
19
20
  },
20
21
  settings: {
21
22
  github: {
22
- components: components
23
+ components,
23
24
  },
24
25
  'jsx-a11y': {
25
- components: components
26
- }
27
- }
26
+ components,
27
+ },
28
+ },
28
29
  }
package/src/index.js CHANGED
@@ -5,9 +5,10 @@ module.exports = {
5
5
  'no-system-props': require('./rules/no-system-props'),
6
6
  'a11y-tooltip-interactive-trigger': require('./rules/a11y-tooltip-interactive-trigger'),
7
7
  'new-color-css-vars': require('./rules/new-color-css-vars'),
8
- 'a11y-explicit-heading': require('./rules/a11y-explicit-heading')
8
+ 'a11y-explicit-heading': require('./rules/a11y-explicit-heading'),
9
+ 'new-color-css-vars-have-fallback': require('./rules/new-color-css-vars-have-fallback'),
9
10
  },
10
11
  configs: {
11
- recommended: require('./configs/recommended')
12
- }
12
+ recommended: require('./configs/recommended'),
13
+ },
13
14
  }
@@ -6,35 +6,35 @@ const ruleTester = new RuleTester({
6
6
  ecmaVersion: 'latest',
7
7
  sourceType: 'module',
8
8
  ecmaFeatures: {
9
- jsx: true
10
- }
11
- }
9
+ jsx: true,
10
+ },
11
+ },
12
12
  })
13
13
 
14
14
  ruleTester.run('a11y-explicit-heading', rule, {
15
15
  valid: [
16
- `import {Heading} from '@primer/react';
16
+ `import {Heading} from '@primer/react';
17
17
  <Heading as="h1">Heading level 1</Heading>
18
18
  `,
19
- `import {Heading} from '@primer/react';
19
+ `import {Heading} from '@primer/react';
20
20
  <Heading as="h2">Heading level 2</Heading>
21
21
  `,
22
- `import {Heading} from '@primer/react';
22
+ `import {Heading} from '@primer/react';
23
23
  <Heading as="H3">Heading level 3</Heading>
24
24
  `,
25
- `import {Heading} from '@primer/react';
25
+ `import {Heading} from '@primer/react';
26
26
  const args = {};
27
27
  <Heading {...args}>A heading with spread props</Heading>
28
28
  `,
29
- `import {Heading} from '@primer/react';
29
+ `import {Heading} from '@primer/react';
30
30
  const as = 'h3';
31
31
  <Heading as={as}>Heading as passed prop</Heading>
32
32
  `,
33
- `import {Heading} from '@primer/react';
33
+ `import {Heading} from '@primer/react';
34
34
  const args = {};
35
35
  <Heading as="h2" {...args}>Heading level 2</Heading>
36
36
  `,
37
- `
37
+ `
38
38
  import {Heading} from '@primer/react';
39
39
  <Heading
40
40
  {...someProps}
@@ -42,22 +42,19 @@ ruleTester.run('a11y-explicit-heading', rule, {
42
42
  >
43
43
  Passed spread props
44
44
  </Heading>
45
- `
46
-
47
- ],
48
- invalid: [
49
- {
50
- code:
51
- `import {Heading} from '@primer/react';
45
+ `,
46
+ ],
47
+ invalid: [
48
+ {
49
+ code: `import {Heading} from '@primer/react';
52
50
  <Heading>Heading without "as"</Heading>`,
53
- errors: [{ messageId: 'nonExplicitHeadingLevel' }]
54
- },
55
- {
56
- code:
57
- `import {Heading} from '@primer/react';
51
+ errors: [{messageId: 'nonExplicitHeadingLevel'}],
52
+ },
53
+ {
54
+ code: `import {Heading} from '@primer/react';
58
55
  <Heading as="span">Heading component used as "span"</Heading>
59
56
  `,
60
- errors: [{ messageId: 'invalidAsValue' }]
61
- },
62
- ]
57
+ errors: [{messageId: 'invalidAsValue'}],
58
+ },
59
+ ],
63
60
  })
@@ -6,9 +6,9 @@ const ruleTester = new RuleTester({
6
6
  ecmaVersion: 'latest',
7
7
  sourceType: 'module',
8
8
  ecmaFeatures: {
9
- jsx: true
10
- }
11
- }
9
+ jsx: true,
10
+ },
11
+ },
12
12
  })
13
13
 
14
14
  ruleTester.run('non-interactive-tooltip-trigger', rule, {
@@ -58,7 +58,7 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
58
58
  <Link href={avatar.avatarLink} underline={true}>
59
59
  User avatar
60
60
  </Link>
61
- </Tooltip>` ,
61
+ </Tooltip>`,
62
62
  `
63
63
  import {Tooltip, Link} from '@primer/react';
64
64
  <Tooltip aria-label="product" direction="e">
@@ -66,7 +66,7 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
66
66
  Product
67
67
  </Link>
68
68
  </Tooltip>
69
- `
69
+ `,
70
70
  ],
71
71
  invalid: [
72
72
  {
@@ -74,9 +74,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
74
74
  `,
75
75
  errors: [
76
76
  {
77
- messageId: 'singleChild'
78
- }
79
- ]
77
+ messageId: 'singleChild',
78
+ },
79
+ ],
80
80
  },
81
81
  {
82
82
  code: `
@@ -87,9 +87,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
87
87
  `,
88
88
  errors: [
89
89
  {
90
- messageId: 'nonInteractiveTrigger'
91
- }
92
- ]
90
+ messageId: 'nonInteractiveTrigger',
91
+ },
92
+ ],
93
93
  },
94
94
  {
95
95
  code: `
@@ -99,9 +99,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
99
99
  </Tooltip>`,
100
100
  errors: [
101
101
  {
102
- messageId: 'nonInteractiveTrigger'
103
- }
104
- ]
102
+ messageId: 'nonInteractiveTrigger',
103
+ },
104
+ ],
105
105
  },
106
106
  {
107
107
  code: `
@@ -111,9 +111,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
111
111
  </Tooltip>`,
112
112
  errors: [
113
113
  {
114
- messageId: 'nonInteractiveLink'
115
- }
116
- ]
114
+ messageId: 'nonInteractiveLink',
115
+ },
116
+ ],
117
117
  },
118
118
  {
119
119
  code: `
@@ -123,9 +123,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
123
123
  </Tooltip>`,
124
124
  errors: [
125
125
  {
126
- messageId: 'nonInteractiveLink'
127
- }
128
- ]
126
+ messageId: 'nonInteractiveLink',
127
+ },
128
+ ],
129
129
  },
130
130
  {
131
131
  code: `
@@ -135,9 +135,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
135
135
  </Tooltip>`,
136
136
  errors: [
137
137
  {
138
- messageId: 'nonInteractiveInput'
139
- }
140
- ]
138
+ messageId: 'nonInteractiveInput',
139
+ },
140
+ ],
141
141
  },
142
142
  {
143
143
  code: `
@@ -147,9 +147,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
147
147
  </Tooltip>`,
148
148
  errors: [
149
149
  {
150
- messageId: 'nonInteractiveInput'
151
- }
152
- ]
150
+ messageId: 'nonInteractiveInput',
151
+ },
152
+ ],
153
153
  },
154
154
  {
155
155
  code: `
@@ -159,9 +159,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
159
159
  </Tooltip>`,
160
160
  errors: [
161
161
  {
162
- messageId: 'nonInteractiveTrigger'
163
- }
164
- ]
162
+ messageId: 'nonInteractiveTrigger',
163
+ },
164
+ ],
165
165
  },
166
166
  {
167
167
  code: `
@@ -171,9 +171,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
171
171
  </Tooltip>`,
172
172
  errors: [
173
173
  {
174
- messageId: 'nonInteractiveTrigger'
175
- }
176
- ]
174
+ messageId: 'nonInteractiveTrigger',
175
+ },
176
+ ],
177
177
  },
178
178
  {
179
179
  code: `
@@ -183,9 +183,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
183
183
  </Tooltip>`,
184
184
  errors: [
185
185
  {
186
- messageId: 'nonInteractiveInput'
187
- }
188
- ]
186
+ messageId: 'nonInteractiveInput',
187
+ },
188
+ ],
189
189
  },
190
190
  {
191
191
  code: `
@@ -197,9 +197,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
197
197
  </Tooltip>`,
198
198
  errors: [
199
199
  {
200
- messageId: 'nonInteractiveTrigger'
201
- }
202
- ]
200
+ messageId: 'nonInteractiveTrigger',
201
+ },
202
+ ],
203
203
  },
204
204
  {
205
205
  code: `import {Tooltip, Button} from '@primer/react';
@@ -210,9 +210,9 @@ ruleTester.run('non-interactive-tooltip-trigger', rule, {
210
210
  </Tooltip>`,
211
211
  errors: [
212
212
  {
213
- messageId: 'nonInteractiveLink'
214
- }
215
- ]
216
- }
217
- ]
213
+ messageId: 'nonInteractiveLink',
214
+ },
215
+ ],
216
+ },
217
+ ],
218
218
  })
@@ -6,9 +6,9 @@ const ruleTester = new RuleTester({
6
6
  ecmaVersion: 'latest',
7
7
  sourceType: 'module',
8
8
  ecmaFeatures: {
9
- jsx: true
10
- }
11
- }
9
+ jsx: true,
10
+ },
11
+ },
12
12
  })
13
13
 
14
14
  ruleTester.run('direct-slot-children', rule, {
@@ -24,7 +24,7 @@ ruleTester.run('direct-slot-children', rule, {
24
24
  <ActionList.LinkItem><ActionList.LeadingVisual></ActionList.LeadingVisual>mona<ActionList.Description>Monalisa Octocat</ActionList.Description></ActionList.LinkItem>`,
25
25
  `import {MarkdownEditor} from '@primer/react'; <MarkdownEditor><MarkdownEditor.Footer><MarkdownEditor.Actions></MarkdownEditor.Actions></MarkdownEditor.Footer></MarkdownEditor>`,
26
26
  `import {MarkdownEditor} from '@primer/react'; <MarkdownEditor><MarkdownEditor.Footer><MarkdownEditor.FooterButton></MarkdownEditor.FooterButton></MarkdownEditor.Footer></MarkdownEditor>`,
27
- {code: `import {Foo} from './Foo'; <Foo><div><Foo.Bar></Foo.Bar></div></Foo>`, options: [{skipImportCheck: true}]}
27
+ {code: `import {Foo} from './Foo'; <Foo><div><Foo.Bar></Foo.Bar></div></Foo>`, options: [{skipImportCheck: true}]},
28
28
  ],
29
29
  invalid: [
30
30
  {
@@ -32,54 +32,54 @@ ruleTester.run('direct-slot-children', rule, {
32
32
  errors: [
33
33
  {
34
34
  messageId: 'directSlotChildren',
35
- data: {childName: 'PageLayout.Header', parentName: 'PageLayout'}
36
- }
37
- ]
35
+ data: {childName: 'PageLayout.Header', parentName: 'PageLayout'},
36
+ },
37
+ ],
38
38
  },
39
39
  {
40
40
  code: `import {PageLayout} from '@primer/react'; function Header() { return <PageLayout.Header>Header</PageLayout.Header>; }`,
41
41
  errors: [
42
42
  {
43
43
  messageId: 'directSlotChildren',
44
- data: {childName: 'PageLayout.Header', parentName: 'PageLayout'}
45
- }
46
- ]
44
+ data: {childName: 'PageLayout.Header', parentName: 'PageLayout'},
45
+ },
46
+ ],
47
47
  },
48
48
  {
49
49
  code: `import {PageLayout} from '@primer/react/drafts'; <PageLayout.Header>Header</PageLayout.Header>`,
50
50
  errors: [
51
51
  {
52
52
  messageId: 'directSlotChildren',
53
- data: {childName: 'PageLayout.Header', parentName: 'PageLayout'}
54
- }
55
- ]
53
+ data: {childName: 'PageLayout.Header', parentName: 'PageLayout'},
54
+ },
55
+ ],
56
56
  },
57
57
  {
58
58
  code: `import {PageLayout} from '@primer/react'; <div><PageLayout.Header>Header</PageLayout.Header></div>`,
59
59
  errors: [
60
60
  {
61
61
  messageId: 'directSlotChildren',
62
- data: {childName: 'PageLayout.Header', parentName: 'PageLayout'}
63
- }
64
- ]
62
+ data: {childName: 'PageLayout.Header', parentName: 'PageLayout'},
63
+ },
64
+ ],
65
65
  },
66
66
  {
67
67
  code: `import {PageLayout} from '@primer/react'; <PageLayout><div><PageLayout.Header>Header</PageLayout.Header></div></PageLayout>`,
68
68
  errors: [
69
69
  {
70
70
  messageId: 'directSlotChildren',
71
- data: {childName: 'PageLayout.Header', parentName: 'PageLayout'}
72
- }
73
- ]
71
+ data: {childName: 'PageLayout.Header', parentName: 'PageLayout'},
72
+ },
73
+ ],
74
74
  },
75
75
  {
76
76
  code: `import {TreeView} from '@primer/react'; <TreeView><TreeView.Item><div><TreeView.LeadingVisual>Visual</TreeView.LeadingVisual></div></TreeView.Item></TreeView>`,
77
77
  errors: [
78
78
  {
79
79
  messageId: 'directSlotChildren',
80
- data: {childName: 'TreeView.LeadingVisual', parentName: 'TreeView.Item'}
81
- }
82
- ]
80
+ data: {childName: 'TreeView.LeadingVisual', parentName: 'TreeView.Item'},
81
+ },
82
+ ],
83
83
  },
84
84
  {
85
85
  code: `import {PageLayout} from './PageLayout'; <PageLayout><div><PageLayout.Header>Header</PageLayout.Header></div></PageLayout>`,
@@ -87,36 +87,36 @@ ruleTester.run('direct-slot-children', rule, {
87
87
  errors: [
88
88
  {
89
89
  messageId: 'directSlotChildren',
90
- data: {childName: 'PageLayout.Header', parentName: 'PageLayout'}
91
- }
92
- ]
90
+ data: {childName: 'PageLayout.Header', parentName: 'PageLayout'},
91
+ },
92
+ ],
93
93
  },
94
94
  {
95
95
  code: `import {ActionList} from '@primer/react'; <ActionList.Item><div><ActionList.LeadingVisual>Visual</ActionList.LeadingVisual></div></ActionList.Item>`,
96
96
  errors: [
97
97
  {
98
98
  messageId: 'directSlotChildren',
99
- data: {childName: 'ActionList.LeadingVisual', parentName: 'ActionList.Item or ActionList.LinkItem'}
100
- }
101
- ]
99
+ data: {childName: 'ActionList.LeadingVisual', parentName: 'ActionList.Item or ActionList.LinkItem'},
100
+ },
101
+ ],
102
102
  },
103
103
  {
104
104
  code: `import {MarkdownEditor} from '@primer/react'; <MarkdownEditor><div><MarkdownEditor.Actions></MarkdownEditor.Actions></div></MarkdownEditor>`,
105
105
  errors: [
106
106
  {
107
107
  messageId: 'directSlotChildren',
108
- data: {childName: 'MarkdownEditor.Actions', parentName: 'MarkdownEditor or MarkdownEditor.Footer'}
109
- }
110
- ]
108
+ data: {childName: 'MarkdownEditor.Actions', parentName: 'MarkdownEditor or MarkdownEditor.Footer'},
109
+ },
110
+ ],
111
111
  },
112
112
  {
113
113
  code: `import {MarkdownEditor} from '@primer/react'; <MarkdownEditor><MarkdownEditor.FooterButton></MarkdownEditor.FooterButton></MarkdownEditor>`,
114
114
  errors: [
115
115
  {
116
116
  messageId: 'directSlotChildren',
117
- data: {childName: 'MarkdownEditor.FooterButton', parentName: 'MarkdownEditor.Footer'}
118
- }
119
- ]
120
- }
121
- ]
117
+ data: {childName: 'MarkdownEditor.FooterButton', parentName: 'MarkdownEditor.Footer'},
118
+ },
119
+ ],
120
+ },
121
+ ],
122
122
  })