waveterm/.storybook/preview.tsx
2024-12-10 12:11:35 -08:00

61 lines
1.6 KiB
TypeScript

// organize-imports-ignore
import type { Preview } from "@storybook/react";
import React from "react";
import { DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend";
import "../frontend/app/theme.scss";
import "../frontend/app/app.scss";
import "../frontend/app/reset.scss";
import "./global.css";
import { light, dark } from "./theme";
import { DocsContainer } from "@storybook/addon-docs";
import { addons } from "@storybook/preview-api";
import { DARK_MODE_EVENT_NAME } from "storybook-dark-mode";
const channel = addons.getChannel();
const preview: Preview = {
parameters: {
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
darkMode: {
dark,
light,
stylePreview: true,
classTarget: "html",
},
docs: {
container: (props) => {
const [isDark, setDark] = React.useState();
React.useEffect(() => {
channel.on(DARK_MODE_EVENT_NAME, setDark);
return () => channel.removeListener(DARK_MODE_EVENT_NAME, setDark);
}, [channel, setDark]);
return (
<div>
<DocsContainer {...props} theme={isDark ? dark : light} />
</div>
);
},
},
},
decorators: [
(Story) => (
<DndProvider backend={HTML5Backend}>
<Story />
</DndProvider>
),
],
tags: ["autodocs"],
};
export default preview;