Ginger Book User guide
CSS
You can import CSS files directly into your components or stories:
import "./styles.css";
If you want to use your stylesheet across all stories, you can create .ginger-book/components.tsx
file and import it there. This file can be also used to specify a global provider. That can be useful for CSS-in-JS solutions.
CSS Modules
Any CSS file ending with .module.css
is considered a CSS modules file. Importing such a file will return the corresponding module object:
/* example.module.css */
.red {
color: red;
}
import type { Story } from "@ginger-society/ginger-book";
import classes from "./example.module.css";
export const MyStory: Story = () => {
return <h1 className={classes.red}>Red Header</h1>;
};
PostCSS
If the project contains valid PostCSS config (any format supported by postcss-load-config, e.g. postcss.config.js
), it will be automatically applied to all imported CSS.
GingerBook just defaults to Vite’s CSS handling.
Tailwind
There is a working example. You need to install tailwindcss
and create
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
and
module.exports = {
content: ["./src/**/*.{js,ts,jsx,tsx}"],
theme: {},
variants: {},
plugins: [],
};
Emotion
Add these dependencies
pnpm add @emotion/react @swc/plugin-emotion @vitejs/plugin-react-swc
And create
import react from "@vitejs/plugin-react-swc";
export default {
plugins: [
react({
jsxImportSource: "@emotion/react",
plugins: [["@swc/plugin-emotion", {}]],
}),
],
};
Styled-components
Styled-components work out of the box but it’s highly recommended to install the optional plugin.
pnpm add styled-components @swc/plugin-styled-components @vitejs/plugin-react-swc
And create
import react from "@vitejs/plugin-react-swc";
export default {
plugins: [
react({
plugins: [["@swc/plugin-styled-components", {}]],
}),
],
};
BaseWeb and Styletron
pnpm add baseui styletron-react styletron-engine-monolithic
and create a global provider:
import { Provider as StyletronProvider } from "styletron-react";
import { Client as Styletron } from "styletron-engine-monolithic";
import { LightTheme, DarkTheme, BaseProvider } from "baseui";
import type { GlobalProvider } from "@ginger-society/ginger-book";
const engine = new Styletron();
export const Provider: GlobalProvider = ({ children, globalState }) => (
<StyletronProvider value={engine}>
<BaseProvider
theme={{
...(globalState.theme === "dark" ? DarkTheme : LightTheme),
direction: globalState.rtl ? "rtl" : "ltr",
}}
>
{children}
</BaseProvider>
</StyletronProvider>
);
This will setup BaseWeb component library, Styletron and integrates Dark/Light themes with GingerBook.