Skip to content

Commit 8016f62

Browse files
committed
Adding theme switcher and sample components
1 parent ebad042 commit 8016f62

18 files changed

+305
-106
lines changed

.idea/workspace.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.storybook/main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const config = {
77
"@storybook/addon-essentials",
88
"@chromatic-com/storybook",
99
"@storybook/addon-interactions",
10+
"@storybook/addon-themes"
1011
],
1112
framework: {
1213
name: "@storybook/react-webpack5",

.storybook/preview.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import '../src/index.css';
22

3+
import { withThemeByClassName } from "@storybook/addon-themes";
4+
35
/** @type { import('@storybook/react').Preview } */
46
const preview = {
57
parameters: {
@@ -10,6 +12,15 @@ const preview = {
1012
},
1113
},
1214
},
15+
16+
decorators: [withThemeByClassName({
17+
themes: {
18+
// nameOfTheme: 'classNameForTheme',
19+
'ZopDev': 'zopdev',
20+
'Forest': 'forest'
21+
},
22+
defaultTheme: 'ZopDev',
23+
})]
1324
};
1425

1526
export default preview;

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This component library is made for React using tailwindcss.
44
Goal of this project is to provide ready to use UI components to
55
develop UI applications faster.
66

7-
All components are documented in storybook. Use `npm run storybook`
7+
All components are documented in storybook. Use `npm run start`
88
to start the storybook locally. Latest version of stories can also
99
be accessed at https://zop.dev/ui-components
1010

package-lock.json

Lines changed: 115 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,8 @@
1313
"web-vitals": "^2.1.4"
1414
},
1515
"scripts": {
16-
"start": "react-scripts start",
17-
"build": "react-scripts build",
18-
"test": "react-scripts test",
19-
"eject": "react-scripts eject",
20-
"storybook": "storybook dev -p 6006",
21-
"build-storybook": "storybook build"
16+
"start": "storybook dev -p 6006",
17+
"build": "storybook build"
2218
},
2319
"eslintConfig": {
2420
"extends": [
@@ -45,17 +41,21 @@
4541
"@storybook/addon-interactions": "^8.3.6",
4642
"@storybook/addon-links": "^8.3.6",
4743
"@storybook/addon-onboarding": "^8.3.6",
44+
"@storybook/addon-themes": "^8.3.6",
4845
"@storybook/blocks": "^8.3.6",
46+
"@storybook/manager-api": "^8.3.6",
4947
"@storybook/preset-create-react-app": "^8.3.6",
5048
"@storybook/react": "^8.3.6",
5149
"@storybook/react-webpack5": "^8.3.6",
5250
"@storybook/test": "^8.3.6",
51+
"@storybook/theming": "^8.3.6",
5352
"autoprefixer": "^10.4.20",
5453
"eslint-plugin-storybook": "^0.10.1",
5554
"postcss": "^8.4.47",
5655
"prop-types": "^15.8.1",
5756
"storybook": "^8.3.6",
5857
"tailwindcss": "^3.4.14",
58+
"tw-colors": "^3.3.2",
5959
"webpack": "^5.95.0"
6060
}
6161
}

src/App.css

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/App.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/App.test.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/components/Button/Button.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import PropTypes from "prop-types";
2+
3+
export default function Button({ label, size, ...props}) {
4+
let classes = "bg-primary-500 shadow-sm font-semibold text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 hover:bg-primary-400 "
5+
switch (size) {
6+
case 'XS':
7+
classes += 'rounded px-2 py-1 text-xs'
8+
break;
9+
case 'S':
10+
classes += 'rounded px-2 py-1 text-sm'
11+
break;
12+
case 'M':
13+
classes += 'rounded-md px-2.5 py-1.5 text-sm'
14+
break;
15+
case 'L':
16+
classes += 'rounded-md px-3 py-2 text-sm'
17+
break;
18+
case 'XL':
19+
classes += 'rounded-md px-3.5 py-2.5 text-sm'
20+
break;
21+
default:
22+
classes += 'rounded-md px-2.5 py-1.5 text-sm'
23+
}
24+
25+
return (
26+
<button type="button" className={classes} {...props}>{label}</button>
27+
)
28+
}
29+
30+
Button.propTypes = {
31+
/** How large should the button be? */
32+
size: PropTypes.oneOf(['XS', 'S', 'M', 'L', 'XL']),
33+
/** Button contents */
34+
label: PropTypes.string.isRequired,
35+
/** Optional click handler */
36+
onClick: PropTypes.func,
37+
};
38+
39+
Button.defaultProps = {
40+
label: 'Get Started',
41+
size: 'M',
42+
onClick: undefined,
43+
};

0 commit comments

Comments
 (0)