Skip to content

Commit 9d7e42e

Browse files
authored
Storybook 8 upgrade (#1047)
* try to upgrade to storybook 8 * fix storybook ts gen * Lint and Prettier * fix mui type issue --------- Co-authored-by: KevinVandy <[email protected]>
1 parent 8de777f commit 9d7e42e

File tree

14 files changed

+1566
-2558
lines changed

14 files changed

+1566
-2558
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,5 @@ yarn-error.log*
3939

4040
# turbo
4141
.turbo
42+
43+
*storybook.log

apps/material-react-table-docs/package.json

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"sitemap": "pnpm docs:sitemap"
1414
},
1515
"dependencies": {
16-
"@docsearch/js": "3.5.2",
16+
"@docsearch/js": "3.6.0",
1717
"@emotion/react": "^11.11.4",
1818
"@emotion/styled": "^11.11.0",
1919
"@faker-js/faker": "^8.4.1",
@@ -22,35 +22,35 @@
2222
"@fortawesome/react-fontawesome": "^0.2.0",
2323
"@mdx-js/loader": "^3.0.1",
2424
"@mdx-js/react": "^3.0.1",
25-
"@mui/icons-material": "^5.15.12",
26-
"@mui/material": "^5.15.12",
25+
"@mui/icons-material": "^5.15.13",
26+
"@mui/material": "^5.15.13",
2727
"@mui/x-charts": "^6.19.5",
28-
"@mui/x-date-pickers": "^6.19.6",
29-
"@next/mdx": "^14.1.2",
30-
"@tanstack/react-query": "^5.25.0",
28+
"@mui/x-date-pickers": "^6.19.7",
29+
"@next/mdx": "^14.1.3",
30+
"@tanstack/react-query": "^5.28.4",
3131
"@tanstack/react-table-devtools": "^8.13.2",
3232
"@types/mdx": "^2.0.11",
3333
"dayjs": "^1.11.10",
34-
"export-to-csv": "^1.2.3",
34+
"export-to-csv": "^1.2.4",
3535
"jspdf": "^2.5.1",
3636
"jspdf-autotable": "^3.8.2",
3737
"material-react-table": "workspace:*",
38-
"next": "14.1.2",
38+
"next": "14.1.3",
3939
"next-sitemap": "^4.2.3",
4040
"prism-react-renderer": "^2.3.1",
4141
"react": "18.2.0",
4242
"react-dom": "18.2.0",
4343
"zod": "^3.22.4"
4444
},
4545
"devDependencies": {
46-
"@tanstack/eslint-plugin-query": "^5.20.1",
47-
"@types/node": "^20.11.25",
48-
"@types/react": "^18.2.64",
49-
"@types/react-dom": "^18.2.20",
50-
"@typescript-eslint/eslint-plugin": "^7.1.1",
51-
"@typescript-eslint/parser": "^7.1.1",
46+
"@tanstack/eslint-plugin-query": "^5.27.7",
47+
"@types/node": "^20.11.29",
48+
"@types/react": "^18.2.67",
49+
"@types/react-dom": "^18.2.22",
50+
"@typescript-eslint/eslint-plugin": "^7.3.0",
51+
"@typescript-eslint/parser": "^7.3.0",
5252
"eslint": "8.57.0",
53-
"eslint-config-next": "14.1.2",
53+
"eslint-config-next": "14.1.3",
5454
"next-plausible": "^3.12.0",
5555
"raw-loader": "^4.0.2",
5656
"typescript": "5.4.2"

apps/test-cra/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
"dependencies": {
66
"@emotion/react": "^11.11.4",
77
"@emotion/styled": "^11.11.0",
8-
"@mui/icons-material": "^5.15.12",
9-
"@mui/material": "^5.15.12",
10-
"@mui/x-date-pickers": "^6.19.6",
8+
"@mui/icons-material": "^5.15.13",
9+
"@mui/material": "^5.15.13",
10+
"@mui/x-date-pickers": "^6.19.7",
1111
"@testing-library/jest-dom": "^6.4.2",
1212
"@testing-library/react": "^14.2.1",
1313
"@testing-library/user-event": "^14.5.2",

apps/test-remix/package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@
1212
"dependencies": {
1313
"@emotion/react": "^11.11.4",
1414
"@emotion/styled": "^11.11.0",
15-
"@mui/icons-material": "^5.15.12",
16-
"@mui/material": "^5.15.12",
17-
"@mui/x-date-pickers": "^6.19.6",
18-
"@remix-run/css-bundle": "^2.8.0",
19-
"@remix-run/node": "^2.8.0",
20-
"@remix-run/react": "^2.8.0",
21-
"@remix-run/serve": "^2.8.0",
22-
"isbot": "^5.1.1",
15+
"@mui/icons-material": "^5.15.13",
16+
"@mui/material": "^5.15.13",
17+
"@mui/x-date-pickers": "^6.19.7",
18+
"@remix-run/css-bundle": "^2.8.1",
19+
"@remix-run/node": "^2.8.1",
20+
"@remix-run/react": "^2.8.1",
21+
"@remix-run/serve": "^2.8.1",
22+
"isbot": "^5.1.2",
2323
"material-react-table": "workspace:*",
2424
"react": "^18.2.0",
2525
"react-dom": "^18.2.0"
2626
},
2727
"devDependencies": {
28-
"@remix-run/dev": "^2.8.0",
29-
"@remix-run/eslint-config": "^2.8.0",
30-
"@types/react": "^18.2.64",
31-
"@types/react-dom": "^18.2.20",
28+
"@remix-run/dev": "^2.8.1",
29+
"@remix-run/eslint-config": "^2.8.1",
30+
"@types/react": "^18.2.67",
31+
"@types/react-dom": "^18.2.22",
3232
"eslint": "^8.57.0",
3333
"typescript": "^5.4.2"
3434
},

apps/test-vite/package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@
1212
"dependencies": {
1313
"@emotion/react": "^11.11.4",
1414
"@emotion/styled": "^11.11.0",
15-
"@mui/icons-material": "^5.15.12",
16-
"@mui/material": "^5.15.12",
17-
"@mui/x-date-pickers": "^6.19.6",
15+
"@mui/icons-material": "^5.15.13",
16+
"@mui/material": "^5.15.13",
17+
"@mui/x-date-pickers": "^6.19.7",
1818
"material-react-table": "workspace:*",
1919
"react": "^18.2.0",
2020
"react-dom": "^18.2.0"
2121
},
2222
"devDependencies": {
23-
"@types/react": "^18.2.64",
24-
"@types/react-dom": "^18.2.20",
25-
"@typescript-eslint/eslint-plugin": "^7.1.1",
26-
"@typescript-eslint/parser": "^7.1.1",
23+
"@types/react": "^18.2.67",
24+
"@types/react-dom": "^18.2.22",
25+
"@typescript-eslint/eslint-plugin": "^7.3.0",
26+
"@typescript-eslint/parser": "^7.3.0",
2727
"@vitejs/plugin-react": "^4.2.1",
2828
"eslint": "^8.57.0",
2929
"eslint-plugin-react-hooks": "^4.6.0",
30-
"eslint-plugin-react-refresh": "^0.4.5",
30+
"eslint-plugin-react-refresh": "^0.4.6",
3131
"typescript": "^5.4.2",
32-
"vite": "^5.1.5"
32+
"vite": "^5.1.6"
3333
}
3434
}

packages/material-react-table/.eslintrc

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22
"extends": [
33
"eslint:recommended",
44
"plugin:@typescript-eslint/recommended",
5+
"plugin:storybook/recommended",
56
"plugin:perfectionist/recommended-natural",
67
],
78
"parser": "@typescript-eslint/parser",
8-
"plugins": ["@typescript-eslint", "mui-path-imports", "perfectionist"],
9+
"plugins": [
10+
"@typescript-eslint",
11+
"mui-path-imports",
12+
"perfectionist"
13+
],
914
"rules": {
1015
"@typescript-eslint/ban-ts-comment": "off",
1116
"@typescript-eslint/ban-types": "off",
@@ -38,11 +43,20 @@
3843
],
3944
"custom-groups": {
4045
"value": {
41-
"react": ["react", "react-*"],
42-
"storybook": ["@storybook/**"],
46+
"react": [
47+
"react",
48+
"react-*"
49+
],
50+
"storybook": [
51+
"@storybook/**"
52+
],
4353
"tanstack": "@tanstack/**",
4454
"mui": "@mui/**",
45-
"mrt": ["./MRT_**", "../**MRT_**", "../../src"],
55+
"mrt": [
56+
"./MRT_**",
57+
"../**MRT_**",
58+
"../../src"
59+
],
4660
"faker": "@faker/**",
4761
},
4862
"type": {
@@ -54,5 +68,9 @@
5468
],
5569
},
5670
"root": true,
57-
"ignorePatterns": ["dist/", "locales/", "node_modules/"],
58-
}
71+
"ignorePatterns": [
72+
"dist/",
73+
"locales/",
74+
"node_modules/"
75+
],
76+
}
Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,38 @@
1-
import { StorybookConfig } from '@storybook/react-vite';
1+
import type { StorybookConfig } from '@storybook/react-vite';
2+
3+
import { join, dirname } from 'path';
4+
5+
/**
6+
* This function is used to resolve the absolute path of a package.
7+
* It is needed in projects that use Yarn PnP or are set up within a monorepo.
8+
*/
9+
function getAbsolutePath(value: string): any {
10+
return dirname(require.resolve(join(value, 'package.json')));
11+
}
212
const config: StorybookConfig = {
3-
stories: ['../stories/**/*.mdx', '../stories/**/*.stories.@(js|jsx|ts|tsx)'],
13+
stories: [
14+
'../stories/**/*.mdx',
15+
'../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)',
16+
],
417
addons: [
5-
'@storybook/addon-links',
6-
'@storybook/addon-essentials',
7-
'@storybook/addon-interactions',
8-
'@storybook/addon-a11y',
9-
'storybook-dark-mode',
10-
{
11-
name: '@storybook/addon-storysource',
12-
options: {
13-
loaderOptions: {
14-
injectStoryParameters: false,
15-
prettierConfig: { printWidth: 40, singleQuote: false },
16-
},
17-
},
18-
},
18+
getAbsolutePath('@storybook/addon-onboarding'),
19+
getAbsolutePath('@storybook/addon-links'),
20+
getAbsolutePath('@storybook/addon-essentials'),
21+
getAbsolutePath('@chromatic-com/storybook'),
22+
getAbsolutePath('@storybook/addon-interactions'),
23+
getAbsolutePath('@storybook/addon-a11y'),
24+
getAbsolutePath('@storybook/addon-storysource'),
25+
getAbsolutePath('storybook-dark-mode'),
1926
],
2027
framework: {
21-
name: '@storybook/react-vite',
28+
name: getAbsolutePath('@storybook/react-vite'),
2229
options: {},
2330
},
2431
docs: {
2532
autodocs: 'tag',
2633
},
34+
typescript: {
35+
reactDocgen: 'react-docgen-typescript',
36+
},
2737
};
2838
export default config;

packages/material-react-table/.storybook/preview.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
import React from 'react';
2-
import { useEffect } from 'react';
1+
import React, { useEffect, useState } from 'react';
2+
import { addons } from '@storybook/preview-api';
33
import { Preview } from '@storybook/react';
4-
import { useDarkMode } from 'storybook-dark-mode';
4+
import { useDarkMode, DARK_MODE_EVENT_NAME } from 'storybook-dark-mode';
55
import { createTheme, ThemeProvider } from '@mui/material/styles';
66
import Typography from '@mui/material/Typography';
77
import Link from '@mui/material/Link';
88
import { LocalizationProvider } from '@mui/x-date-pickers';
99
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
1010
import { CssBaseline } from '@mui/material';
1111

12+
const channel = addons.getChannel();
13+
1214
const lightTheme = createTheme({
1315
palette: { mode: 'light' },
1416
});
@@ -29,17 +31,19 @@ const preview: Preview = {
2931
},
3032
decorators: [
3133
(Story, context) => {
32-
const defaultTheme = useDarkMode() ? darkTheme : lightTheme;
34+
const [isDark, setDark] = useState(false);
35+
const theme = isDark ? darkTheme : lightTheme;
3336

3437
useEffect(() => {
3538
const sbRoot = document.getElementsByClassName(
3639
'sb-show-main',
3740
)[0] as HTMLElement;
41+
channel.on(DARK_MODE_EVENT_NAME, setDark);
3842
if (sbRoot) {
39-
sbRoot.style.backgroundColor =
40-
defaultTheme.palette.background.default;
43+
sbRoot.style.backgroundColor = theme.palette.background.default;
4144
}
42-
}, [useDarkMode()]);
45+
return () => channel.off(DARK_MODE_EVENT_NAME, setDark);
46+
}, [theme]);
4347

4448
useEffect(() => {
4549
if (process.env.NODE_ENV === 'development') return;
@@ -55,7 +59,7 @@ const preview: Preview = {
5559
}, []);
5660

5761
return (
58-
<ThemeProvider theme={defaultTheme}>
62+
<ThemeProvider theme={theme}>
5963
<CssBaseline />
6064
<LocalizationProvider dateAdapter={AdapterDayjs}>
6165
<Typography

0 commit comments

Comments
 (0)