aboutsummaryrefslogtreecommitdiffstats
path: root/packages/forms/.storybook
diff options
context:
space:
mode:
Diffstat (limited to 'packages/forms/.storybook')
-rw-r--r--packages/forms/.storybook/addons.js2
-rw-r--r--packages/forms/.storybook/config.js15
-rw-r--r--packages/forms/.storybook/preview-head.html7
-rw-r--r--packages/forms/.storybook/theme/index.js58
4 files changed, 82 insertions, 0 deletions
diff --git a/packages/forms/.storybook/addons.js b/packages/forms/.storybook/addons.js
new file mode 100644
index 000000000..6aed412d0
--- /dev/null
+++ b/packages/forms/.storybook/addons.js
@@ -0,0 +1,2 @@
1import '@storybook/addon-actions/register';
2import '@storybook/addon-links/register';
diff --git a/packages/forms/.storybook/config.js b/packages/forms/.storybook/config.js
new file mode 100644
index 000000000..d6a69e569
--- /dev/null
+++ b/packages/forms/.storybook/config.js
@@ -0,0 +1,15 @@
1import { configure, addDecorator } from '@storybook/react';
2import { withInfo } from '@storybook/addon-info';
3import withTheme from '../.storybook/theme';
4
5// automatically import all files ending in *.stories.js
6const req = require.context('../stories', true, /.stories.js$/);
7
8addDecorator(withInfo());
9addDecorator(withTheme());
10
11function loadStories() {
12 req.keys().forEach(filename => req(filename));
13}
14
15configure(loadStories, module);
diff --git a/packages/forms/.storybook/preview-head.html b/packages/forms/.storybook/preview-head.html
new file mode 100644
index 000000000..f5bf78b7a
--- /dev/null
+++ b/packages/forms/.storybook/preview-head.html
@@ -0,0 +1,7 @@
1<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,800" rel="stylesheet">
2<style>
3 * {
4 font-family: 'Open Sans', sans-serif;
5 font-size: 14px;
6 }
7</style>
diff --git a/packages/forms/.storybook/theme/index.js b/packages/forms/.storybook/theme/index.js
new file mode 100644
index 000000000..f016f21eb
--- /dev/null
+++ b/packages/forms/.storybook/theme/index.js
@@ -0,0 +1,58 @@
1import React from 'react';
2import injectSheet, { ThemeProvider } from 'react-jss';
3import addons, { makeDecorator } from '@storybook/addons';
4import theme from '@meetfranz/theme';
5
6const defaultTheme = {
7 name: 'Default',
8 variables: theme('default'),
9};
10
11const darkTheme = {
12 name: 'Dark Mode',
13 variables: theme('dark'),
14};
15
16const themes = [defaultTheme, darkTheme];
17
18const styles = (theme) => ({
19 title: {
20 fontSize: 14,
21 },
22 container: {
23 border: theme.inputBorder,
24 borderRadius: theme.borderRadiusSmall,
25 marginBottom: 20,
26 padding: 20,
27 background: theme.colorContentBackground,
28 },
29});
30
31const Container = injectSheet(styles)(({ name, classes, story }) => (
32 <article>
33 <h1 className={classes.title}>{name}</h1>
34 <div className={classes.container}>
35 {story}
36 </div>
37 </article>
38));
39
40export default makeDecorator({
41 name: 'withTheme',
42 parameterName: 'theme',
43 // This means don't run this decorator if the notes decorator is not set
44 // skipIfNoParametersOrOptions: true,
45 wrapper: (getStory, context, { options }) => {
46 const channel = addons.getChannel();
47
48 return (
49 <>
50 {themes.map(theme => (
51 <ThemeProvider theme={theme.variables}>
52 <Container story={getStory(context)} name={theme.name} />
53 </ThemeProvider>
54 ))}
55 </>
56 );
57 }
58})