@storybook/codemod 7.0.0-beta.5 → 7.0.0-beta.51

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. package/README.md +0 -39
  2. package/dist/chunk-HBPKIMKE.mjs +1 -0
  3. package/dist/chunk-YH46OF24.mjs +2 -0
  4. package/dist/index.js +1 -1
  5. package/dist/index.mjs +1 -1
  6. package/dist/transforms/add-component-parameters.js +1 -1
  7. package/dist/transforms/csf-2-to-3.d.ts +5 -4
  8. package/dist/transforms/csf-2-to-3.js +3 -1
  9. package/dist/transforms/csf-2-to-3.mjs +2 -1
  10. package/dist/transforms/csf-hoist-story-annotations.js +1 -1
  11. package/dist/transforms/move-builtin-addons.js +1 -1
  12. package/dist/transforms/storiesof-to-csf.js +1 -1
  13. package/dist/transforms/storiesof-to-csf.mjs +1 -1
  14. package/dist/transforms/update-addon-info.js +1 -1
  15. package/dist/transforms/update-organisation-name.js +1 -1
  16. package/dist/transforms/upgrade-deprecated-types.d.ts +10 -0
  17. package/dist/transforms/upgrade-deprecated-types.js +2 -0
  18. package/dist/transforms/upgrade-deprecated-types.mjs +1 -0
  19. package/dist/transforms/upgrade-hierarchy-separators.js +1 -1
  20. package/jest.config.js +1 -0
  21. package/package.json +15 -10
  22. package/project.json +6 -0
  23. package/src/index.js +11 -1
  24. package/src/lib/utils.ts +2 -2
  25. package/src/transforms/__testfixtures__/storiesof-to-csf/decorators.input.js +1 -1
  26. package/src/transforms/__testfixtures__/storiesof-to-csf/export-function.input.js +1 -1
  27. package/src/transforms/__testfixtures__/storiesof-to-csf/story-decorators.input.js +1 -1
  28. package/src/transforms/__testfixtures__/update-addon-info/update-addon-info.input.js +34 -48
  29. package/src/transforms/__testfixtures__/update-addon-info/update-addon-info.output.snapshot +33 -47
  30. package/src/transforms/__tests__/csf-2-to-3.test.ts +175 -57
  31. package/src/transforms/__tests__/upgrade-deprecated-types.test.ts +170 -0
  32. package/src/transforms/csf-2-to-3.ts +161 -33
  33. package/src/transforms/upgrade-deprecated-types.ts +142 -0
  34. package/dist/chunk-CO6EPEMB.mjs +0 -1
  35. package/dist/transforms/csf-to-mdx.d.ts +0 -29
  36. package/dist/transforms/csf-to-mdx.js +0 -3
  37. package/dist/transforms/csf-to-mdx.mjs +0 -3
  38. package/src/transforms/__testfixtures__/csf-to-mdx/basic.input.js +0 -20
  39. package/src/transforms/__testfixtures__/csf-to-mdx/basic.output.snapshot +0 -18
  40. package/src/transforms/__testfixtures__/csf-to-mdx/component-id.input.js +0 -9
  41. package/src/transforms/__testfixtures__/csf-to-mdx/component-id.output.snapshot +0 -10
  42. package/src/transforms/__testfixtures__/csf-to-mdx/decorators.input.js +0 -13
  43. package/src/transforms/__testfixtures__/csf-to-mdx/decorators.output.snapshot +0 -12
  44. package/src/transforms/__testfixtures__/csf-to-mdx/exclude-stories.input.js +0 -23
  45. package/src/transforms/__testfixtures__/csf-to-mdx/exclude-stories.output.snapshot +0 -22
  46. package/src/transforms/__testfixtures__/csf-to-mdx/parameters.input.js +0 -16
  47. package/src/transforms/__testfixtures__/csf-to-mdx/parameters.output.snapshot +0 -17
  48. package/src/transforms/__testfixtures__/csf-to-mdx/story-function.input.js +0 -19
  49. package/src/transforms/__testfixtures__/csf-to-mdx/story-function.output.snapshot +0 -18
  50. package/src/transforms/__testfixtures__/csf-to-mdx/story-parameters.input.js +0 -24
  51. package/src/transforms/__testfixtures__/csf-to-mdx/story-parameters.output.snapshot +0 -22
  52. package/src/transforms/csf-to-mdx.js +0 -190
@@ -1,5 +1,7 @@
1
1
  import { describe, it, expect } from '@jest/globals';
2
2
  import { dedent } from 'ts-dedent';
3
+ import type { API } from 'jscodeshift';
4
+ import ansiRegex from 'ansi-regex';
3
5
  import _transform from '../csf-2-to-3';
4
6
 
5
7
  expect.addSnapshotSerializer({
@@ -7,8 +9,10 @@ expect.addSnapshotSerializer({
7
9
  test: () => true,
8
10
  });
9
11
 
10
- const jsTransform = (source: string) => _transform({ source }, null, {}).trim();
11
- const tsTransform = (source: string) => _transform({ source }, null, { parser: 'tsx' }).trim();
12
+ const jsTransform = (source: string) =>
13
+ _transform({ source, path: 'Component.stories.js' }, {} as API, {}).trim();
14
+ const tsTransform = (source: string) =>
15
+ _transform({ source, path: 'Component.stories.ts' }, {} as API, { parser: 'tsx' }).trim();
12
16
 
13
17
  describe('csf-2-to-3', () => {
14
18
  describe('javascript', () => {
@@ -20,9 +24,7 @@ describe('csf-2-to-3', () => {
20
24
  export const B = (args) => <Button {...args} />;
21
25
  `)
22
26
  ).toMatchInlineSnapshot(`
23
- export default {
24
- title: 'Cat',
25
- };
27
+ export default { title: 'Cat' };
26
28
  export const A = () => <Cat />;
27
29
  export const B = {
28
30
  render: (args) => <Button {...args} />,
@@ -34,21 +36,19 @@ describe('csf-2-to-3', () => {
34
36
  expect(
35
37
  jsTransform(dedent`
36
38
  export default { title: 'Cat' };
39
+
37
40
  export const A = () => <Cat />;
38
41
  A.storyName = 'foo';
39
42
  A.parameters = { bar: 2 };
40
43
  A.play = () => {};
41
44
  `)
42
45
  ).toMatchInlineSnapshot(`
43
- export default {
44
- title: 'Cat',
45
- };
46
+ export default { title: 'Cat' };
47
+
46
48
  export const A = {
47
49
  render: () => <Cat />,
48
50
  name: 'foo',
49
- parameters: {
50
- bar: 2,
51
- },
51
+ parameters: { bar: 2 },
52
52
  play: () => {},
53
53
  };
54
54
  `);
@@ -58,19 +58,22 @@ describe('csf-2-to-3', () => {
58
58
  expect(
59
59
  jsTransform(dedent`
60
60
  export default { title: 'components/Fruit', includeStories: ['A'] };
61
+
61
62
  export const A = (args) => <Apple {...args} />;
63
+
62
64
  export const B = (args) => <Banana {...args} />;
65
+
63
66
  const C = (args) => <Cherry {...args} />;
64
67
  `)
65
68
  ).toMatchInlineSnapshot(`
66
- export default {
67
- title: 'components/Fruit',
68
- includeStories: ['A'],
69
- };
69
+ export default { title: 'components/Fruit', includeStories: ['A'] };
70
+
70
71
  export const A = {
71
72
  render: (args) => <Apple {...args} />,
72
73
  };
74
+
73
75
  export const B = (args) => <Banana {...args} />;
76
+
74
77
  const C = (args) => <Cherry {...args} />;
75
78
  `);
76
79
  });
@@ -79,10 +82,12 @@ describe('csf-2-to-3', () => {
79
82
  expect(
80
83
  jsTransform(dedent`
81
84
  export const A = () => <Apple />;
85
+
82
86
  export const B = (args) => <Banana {...args} />;
83
87
  `)
84
88
  ).toMatchInlineSnapshot(`
85
89
  export const A = () => <Apple />;
90
+
86
91
  export const B = (args) => <Banana {...args} />;
87
92
  `);
88
93
  });
@@ -95,10 +100,7 @@ describe('csf-2-to-3', () => {
95
100
  export const B = (args) => <Banana {...args} />;
96
101
  `)
97
102
  ).toMatchInlineSnapshot(`
98
- export default {
99
- title: 'Cat',
100
- component: Cat,
101
- };
103
+ export default { title: 'Cat', component: Cat };
102
104
  export const A = {};
103
105
  export const B = {
104
106
  render: (args) => <Banana {...args} />,
@@ -110,15 +112,14 @@ describe('csf-2-to-3', () => {
110
112
  expect(
111
113
  jsTransform(dedent`
112
114
  export default { title: 'Cat', component: Cat };
115
+
113
116
  export const A = {
114
117
  render: (args) => <Cat {...args} />
115
118
  };
116
119
  `)
117
120
  ).toMatchInlineSnapshot(`
118
- export default {
119
- title: 'Cat',
120
- component: Cat,
121
- };
121
+ export default { title: 'Cat', component: Cat };
122
+
122
123
  export const A = {
123
124
  render: (args) => <Cat {...args} />,
124
125
  };
@@ -134,14 +135,11 @@ describe('csf-2-to-3', () => {
134
135
  A.args = { isPrimary: false };
135
136
  `)
136
137
  ).toMatchInlineSnapshot(`
137
- export default {
138
- title: 'Cat',
139
- };
138
+ export default { title: 'Cat' };
139
+
140
140
  export const A = {
141
141
  render: (args) => <Cat {...args} />,
142
- args: {
143
- isPrimary: false,
144
- },
142
+ args: { isPrimary: false },
145
143
  };
146
144
  `);
147
145
  });
@@ -150,28 +148,27 @@ describe('csf-2-to-3', () => {
150
148
  expect(
151
149
  jsTransform(dedent`
152
150
  export default { title: 'Cat', component: Cat };
151
+
153
152
  const Template = (args) => <Cat {...args} />;
153
+
154
154
  export const A = Template.bind({});
155
155
  A.args = { isPrimary: false };
156
+
156
157
  const Template2 = (args) => <Banana {...args} />;
158
+
157
159
  export const B = Template2.bind({});
158
160
  B.args = { isPrimary: true };
159
161
  `)
160
162
  ).toMatchInlineSnapshot(`
161
- export default {
162
- title: 'Cat',
163
- component: Cat,
164
- };
163
+ export default { title: 'Cat', component: Cat };
164
+
165
165
  export const A = {
166
- args: {
167
- isPrimary: false,
168
- },
166
+ args: { isPrimary: false },
169
167
  };
168
+
170
169
  export const B = {
171
170
  render: (args) => <Banana {...args} />,
172
- args: {
173
- isPrimary: true,
174
- },
171
+ args: { isPrimary: true },
175
172
  };
176
173
  `);
177
174
  });
@@ -180,23 +177,21 @@ describe('csf-2-to-3', () => {
180
177
  expect(
181
178
  jsTransform(dedent`
182
179
  export default { title: 'Cat', component: Cat };
180
+
183
181
  export const A = (args) => <Cat {...args} />;
184
182
  export const B = () => <Cat name="frisky" />;
185
183
  export const C = () => <Cat name="fluffy" />;
186
184
  C.parameters = { foo: 2 };
187
185
  `)
188
186
  ).toMatchInlineSnapshot(`
189
- export default {
190
- title: 'Cat',
191
- component: Cat,
192
- };
187
+ export default { title: 'Cat', component: Cat };
188
+
193
189
  export const A = {};
194
190
  export const B = () => <Cat name="frisky" />;
191
+
195
192
  export const C = {
196
193
  render: () => <Cat name="fluffy" />,
197
- parameters: {
198
- foo: 2,
199
- },
194
+ parameters: { foo: 2 },
200
195
  };
201
196
  `);
202
197
  });
@@ -211,39 +206,162 @@ describe('csf-2-to-3', () => {
211
206
  };
212
207
  `)
213
208
  ).toMatchInlineSnapshot(`
214
- export default {
215
- title: 'Cat',
216
- };
209
+ export default { title: 'Cat' };
210
+
217
211
  export const A = {
218
212
  render: (args) => <Cat {...args} />,
219
- parameters: {
220
- foo: 2,
221
- },
213
+ parameters: { foo: 2 },
222
214
  };
223
215
  `);
224
216
  });
225
217
  });
226
218
 
227
219
  describe('typescript', () => {
228
- it('should replace function exports with objects', () => {
220
+ it('should error with namespace imports', () => {
221
+ expect.addSnapshotSerializer({
222
+ serialize: (value) => value.replace(ansiRegex(), ''),
223
+ test: () => true,
224
+ });
225
+ expect(() =>
226
+ tsTransform(dedent`
227
+ import * as SB from '@storybook/react';
228
+ import { CatProps } from './Cat';
229
+
230
+ const meta = { title: 'Cat', component: Cat } as Meta<CatProps>
231
+ export default meta;
232
+
233
+ export const A: SB.StoryFn<CatProps> = () => <Cat />;
234
+ `)
235
+ ).toThrowErrorMatchingInlineSnapshot(`
236
+ This codemod does not support namespace imports for a @storybook/react package.
237
+ Replace the namespace import with named imports and try again.
238
+ > 1 | import * as SB from '@storybook/react';
239
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
240
+ 2 | import { CatProps } from './Cat';
241
+ 3 |
242
+ 4 | const meta = { title: 'Cat', component: Cat } as Meta<CatProps>
243
+ `);
244
+ });
245
+ it('should keep local names', () => {
246
+ expect(
247
+ tsTransform(dedent`
248
+ import { Meta, StoryObj as CSF3, StoryFn as CSF2 } from '@storybook/react';
249
+ import { CatProps } from './Cat';
250
+
251
+ const meta = { title: 'Cat', component: Cat } satisfies Meta<CatProps>
252
+ export default meta;
253
+
254
+ export const A: CSF2<CatProps> = () => <Cat />;
255
+
256
+ export const B: CSF3<CatProps> = {
257
+ args: { name: "already csf3" }
258
+ };
259
+
260
+ export const C: CSF2<CatProps> = (args) => <Cat {...args} />;
261
+ C.args = {
262
+ name: "Fluffy"
263
+ };
264
+ `)
265
+ ).toMatchInlineSnapshot(`
266
+ import { Meta, StoryObj as CSF3, StoryFn as CSF2 } from '@storybook/react';
267
+ import { CatProps } from './Cat';
268
+
269
+ const meta = { title: 'Cat', component: Cat } satisfies Meta<CatProps>;
270
+ export default meta;
271
+
272
+ export const A: CSF2<CatProps> = () => <Cat />;
273
+
274
+ export const B: CSF3<CatProps> = {
275
+ args: { name: 'already csf3' },
276
+ };
277
+
278
+ export const C: CSF3<CatProps> = {
279
+ args: {
280
+ name: 'Fluffy',
281
+ },
282
+ };
283
+ `);
284
+ });
285
+
286
+ it('should replace function exports with objects and update type', () => {
229
287
  expect(
230
288
  tsTransform(dedent`
231
- export default { title: 'Cat' } as Meta<CatProps>;
289
+ import { Story, StoryFn, ComponentStory, ComponentStoryObj } from '@storybook/react';
290
+
291
+ // some extra whitespace to test
292
+
293
+ export default {
294
+ title: 'Cat',
295
+ component: Cat,
296
+ } as Meta<CatProps>;
297
+
232
298
  export const A: Story<CatProps> = (args) => <Cat {...args} />;
299
+ A.args = { name: "Fluffy" };
300
+
233
301
  export const B: any = (args) => <Button {...args} />;
302
+
234
303
  export const C: Story<CatProps> = () => <Cat />;
304
+
305
+ export const D: StoryFn<CatProps> = (args) => <Cat {...args} />;
306
+ D.args = {
307
+ name: "Fluffy"
308
+ };
309
+
310
+ export const E: ComponentStory<Cat> = (args) => <Cat {...args} />;
311
+ E.args = { name: "Fluffy" };
312
+
313
+ export const F: Story = (args) => <Cat {...args} />;
314
+ F.args = {
315
+ name: "Fluffy"
316
+ };
317
+
318
+ export const G: ComponentStoryObj<typeof Cat> = {
319
+ args: {
320
+ name: 'Fluffy',
321
+ },
322
+ };
235
323
  `)
236
324
  ).toMatchInlineSnapshot(`
325
+ import { StoryObj, StoryFn } from '@storybook/react';
326
+
327
+ // some extra whitespace to test
328
+
237
329
  export default {
238
330
  title: 'Cat',
331
+ component: Cat,
239
332
  } as Meta<CatProps>;
240
- export const A: Story<CatProps> = {
241
- render: (args) => <Cat {...args} />,
333
+
334
+ export const A: StoryObj<CatProps> = {
335
+ args: { name: 'Fluffy' },
242
336
  };
337
+
243
338
  export const B: any = {
244
339
  render: (args) => <Button {...args} />,
245
340
  };
246
- export const C: Story<CatProps> = () => <Cat />;
341
+
342
+ export const C: StoryFn<CatProps> = () => <Cat />;
343
+
344
+ export const D: StoryObj<CatProps> = {
345
+ args: {
346
+ name: 'Fluffy',
347
+ },
348
+ };
349
+
350
+ export const E: StoryObj<Cat> = {
351
+ args: { name: 'Fluffy' },
352
+ };
353
+
354
+ export const F: StoryObj = {
355
+ args: {
356
+ name: 'Fluffy',
357
+ },
358
+ };
359
+
360
+ export const G: StoryObj<typeof Cat> = {
361
+ args: {
362
+ name: 'Fluffy',
363
+ },
364
+ };
247
365
  `);
248
366
  });
249
367
  });
@@ -0,0 +1,170 @@
1
+ import { describe, expect, it } from '@jest/globals';
2
+ import { dedent } from 'ts-dedent';
3
+ import type { API } from 'jscodeshift';
4
+ import ansiRegex from 'ansi-regex';
5
+ import _transform from '../upgrade-deprecated-types';
6
+
7
+ expect.addSnapshotSerializer({
8
+ print: (val: any) => val,
9
+ test: () => true,
10
+ });
11
+
12
+ const tsTransform = (source: string) =>
13
+ _transform({ source, path: 'Component.stories.ts' }, {} as API, { parser: 'tsx' }).trim();
14
+
15
+ describe('upgrade-deprecated-types', () => {
16
+ describe('typescript', () => {
17
+ it('upgrade regular imports', () => {
18
+ expect(
19
+ tsTransform(dedent`
20
+ import { Story, ComponentMeta, Meta, ComponentStory, ComponentStoryObj, ComponentStoryFn } from '@storybook/react';
21
+ import { Cat, CatProps } from './Cat';
22
+
23
+ const meta = { title: 'Cat', component: Cat } satisfies ComponentMeta<typeof Cat>
24
+ const meta2: Meta<CatProps> = { title: 'Cat', component: Cat };
25
+ export default meta;
26
+
27
+ export const A: ComponentStory<typeof Cat> = (args) => <Cat {...args} />;
28
+ export const B: any = (args) => <Button {...args} />;
29
+ export const C: ComponentStoryFn<typeof Cat> = (args) => <Cat {...args} />;
30
+ export const D: ComponentStoryObj<typeof Cat> = {
31
+ args: {
32
+ name: 'Fluffy',
33
+ },
34
+ };
35
+ export const E: Story<CatProps> = (args) => <Cat {...args} />;
36
+ `)
37
+ ).toMatchInlineSnapshot(`
38
+ import { StoryFn, Meta, StoryObj } from '@storybook/react';
39
+ import { Cat, CatProps } from './Cat';
40
+
41
+ const meta = { title: 'Cat', component: Cat } satisfies Meta<typeof Cat>;
42
+ const meta2: Meta<CatProps> = { title: 'Cat', component: Cat };
43
+ export default meta;
44
+
45
+ export const A: StoryFn<typeof Cat> = (args) => <Cat {...args} />;
46
+ export const B: any = (args) => <Button {...args} />;
47
+ export const C: StoryFn<typeof Cat> = (args) => <Cat {...args} />;
48
+ export const D: StoryObj<typeof Cat> = {
49
+ args: {
50
+ name: 'Fluffy',
51
+ },
52
+ };
53
+ export const E: StoryFn<CatProps> = (args) => <Cat {...args} />;
54
+ `);
55
+ });
56
+
57
+ it('upgrade imports with local names', () => {
58
+ expect(
59
+ tsTransform(dedent`
60
+ import { Story as Story_, ComponentMeta as ComponentMeta_, ComponentStory as Story__, ComponentStoryObj as ComponentStoryObj_, ComponentStoryFn as StoryFn_ } from '@storybook/react';
61
+ import { Cat } from './Cat';
62
+
63
+ const meta = { title: 'Cat', component: Cat } satisfies ComponentMeta_<typeof Cat>
64
+ const meta2: ComponentMeta_<typeof Cat> = { title: 'Cat', component: Cat };
65
+ export default meta;
66
+
67
+ export const A: Story__<typeof Cat> = (args) => <Cat {...args} />;
68
+ export const B: any = (args) => <Button {...args} />;
69
+ export const C: StoryFn_<typeof Cat> = (args) => <Cat {...args} />;
70
+ export const D: ComponentStoryObj_<typeof Cat> = {
71
+ args: {
72
+ name: 'Fluffy',
73
+ },
74
+ };
75
+ export const E: Story_<CatProps> = (args) => <Cat {...args} />;
76
+ `)
77
+ ).toMatchInlineSnapshot(`
78
+ import {
79
+ StoryFn as Story_,
80
+ Meta as ComponentMeta_,
81
+ StoryObj as ComponentStoryObj_,
82
+ } from '@storybook/react';
83
+ import { Cat } from './Cat';
84
+
85
+ const meta = { title: 'Cat', component: Cat } satisfies ComponentMeta_<typeof Cat>;
86
+ const meta2: ComponentMeta_<typeof Cat> = { title: 'Cat', component: Cat };
87
+ export default meta;
88
+
89
+ export const A: Story__<typeof Cat> = (args) => <Cat {...args} />;
90
+ export const B: any = (args) => <Button {...args} />;
91
+ export const C: StoryFn_<typeof Cat> = (args) => <Cat {...args} />;
92
+ export const D: ComponentStoryObj_<typeof Cat> = {
93
+ args: {
94
+ name: 'Fluffy',
95
+ },
96
+ };
97
+ export const E: Story_<CatProps> = (args) => <Cat {...args} />;
98
+ `);
99
+ });
100
+
101
+ it('upgrade imports with conflicting local names', () => {
102
+ expect.addSnapshotSerializer({
103
+ serialize: (value) => value.replace(ansiRegex(), ''),
104
+ test: () => true,
105
+ });
106
+
107
+ expect(() =>
108
+ tsTransform(dedent`
109
+ import { ComponentMeta as Meta, ComponentStory as StoryFn } from '@storybook/react';
110
+ import { Cat } from './Cat';
111
+
112
+ const meta = { title: 'Cat', component: Cat } satisfies Meta<typeof Cat>
113
+ export default meta;
114
+
115
+ export const A: StoryFn<typeof Cat> = (args) => <Cat {...args} />;
116
+
117
+ `)
118
+ ).toThrowErrorMatchingInlineSnapshot(`
119
+ This codemod does not support local imports that are called the same as a storybook import.
120
+ Rename this local import and try again.
121
+ > 1 | import { ComponentMeta as Meta, ComponentStory as StoryFn } from '@storybook/react';
122
+ | ^^^^^^^^^^^^^^^^^^^^^
123
+ 2 | import { Cat } from './Cat';
124
+ 3 |
125
+ 4 | const meta = { title: 'Cat', component: Cat } satisfies Meta<typeof Cat>
126
+ `);
127
+ });
128
+
129
+ it('upgrade namespaces', () => {
130
+ expect(
131
+ tsTransform(dedent`
132
+ import * as SB from '@storybook/react';
133
+ import { Cat, CatProps } from './Cat';
134
+
135
+ const meta = { title: 'Cat', component: Cat } satisfies SB.ComponentMeta<typeof Cat>;
136
+ const meta2: SB.ComponentMeta<typeof Cat> = { title: 'Cat', component: Cat };
137
+ export default meta;
138
+
139
+ export const A: SB.ComponentStory<typeof Cat> = (args) => <Cat {...args} />;
140
+ export const B: any = (args) => <Button {...args} />;
141
+ export const C: SB.ComponentStoryFn<typeof Cat> = (args) => <Cat {...args} />;
142
+ export const D: SB.ComponentStoryObj<typeof Cat> = {
143
+ args: {
144
+ name: 'Fluffy',
145
+ },
146
+ };
147
+ export const E: SB.Story<CatProps> = (args) => <Cat {...args} />;
148
+
149
+ `)
150
+ ).toMatchInlineSnapshot(`
151
+ import * as SB from '@storybook/react';
152
+ import { Cat, CatProps } from './Cat';
153
+
154
+ const meta = { title: 'Cat', component: Cat } satisfies SB.Meta<typeof Cat>;
155
+ const meta2: SB.Meta<typeof Cat> = { title: 'Cat', component: Cat };
156
+ export default meta;
157
+
158
+ export const A: SB.StoryFn<typeof Cat> = (args) => <Cat {...args} />;
159
+ export const B: any = (args) => <Button {...args} />;
160
+ export const C: SB.StoryFn<typeof Cat> = (args) => <Cat {...args} />;
161
+ export const D: SB.StoryObj<typeof Cat> = {
162
+ args: {
163
+ name: 'Fluffy',
164
+ },
165
+ };
166
+ export const E: SB.StoryFn<CatProps> = (args) => <Cat {...args} />;
167
+ `);
168
+ });
169
+ });
170
+ });