We want to be able to visualize easily themes directly inside Storybook. This was not a trivial task as there is no centralized logic to handle Doc / Stories / Manager at the same time.
77 lines
2.4 KiB
TypeScript
77 lines
2.4 KiB
TypeScript
import '../src/icons.scss';
|
|
import '../src/index.scss';
|
|
import '../src/fonts.scss';
|
|
import { Preview } from '@storybook/react';
|
|
import { DocsContainer } from '@storybook/blocks';
|
|
|
|
import { CunninghamProvider } from ':/components/Provider';
|
|
import { BACKGROUND_COLOR_TO_THEME, getThemeFromGlobals, themes } from './themes';
|
|
|
|
export const DocsWithTheme = (props, context) => {
|
|
const theme = getThemeFromGlobals(props.context.store.globals.globals);
|
|
return <CunninghamProvider theme={theme}>
|
|
<DocsContainer {...props} theme={themes[theme]} />
|
|
</CunninghamProvider>;
|
|
};
|
|
|
|
const preview: Preview = {
|
|
decorators: [
|
|
(Story, context) => (
|
|
<CunninghamProvider theme={getThemeFromGlobals(context.globals)}>
|
|
<Story />
|
|
</CunninghamProvider>
|
|
),
|
|
],
|
|
parameters: {
|
|
actions: { argTypesRegex: '^on[A-Z].*' },
|
|
backgrounds: {
|
|
default: null,
|
|
values: Object.entries(BACKGROUND_COLOR_TO_THEME).map(value => ({
|
|
name: value[1],
|
|
value: value[0],
|
|
})),
|
|
},
|
|
controls: {
|
|
matchers: {
|
|
color: /(background|color)$/i,
|
|
date: /Date$/,
|
|
},
|
|
},
|
|
docs: {
|
|
container: DocsWithTheme,
|
|
},
|
|
options: {
|
|
storySort: (a, b) => {
|
|
const roots = ['Getting Started', 'Components'];
|
|
const gettingStartedOrder = [
|
|
'Installation',
|
|
'First steps',
|
|
'Customization',
|
|
'Theming',
|
|
'Colors',
|
|
'Spacings',
|
|
'Typography',
|
|
];
|
|
|
|
const aParts = a.title.split('/');
|
|
const bParts = b.title.split('/');
|
|
if (aParts[0] !== bParts[0]) {
|
|
return roots.indexOf(aParts[0]) - roots.indexOf(bParts[0]);
|
|
}
|
|
if (aParts[1] !== bParts[1]) {
|
|
if (aParts[0] === 'Getting Started') {
|
|
return (
|
|
gettingStartedOrder.indexOf(aParts[1]) -
|
|
gettingStartedOrder.indexOf(bParts[1])
|
|
);
|
|
}
|
|
return aParts[1].localeCompare(bParts[1]);
|
|
}
|
|
return 0;
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export default preview;
|