| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { useEffect } from 'react';
- import type { Decorator, Preview } from '@storybook/react-vite';
- import { ConfigProvider, theme as antdTheme } from 'antd';
- import i18next from 'i18next';
- import { initReactI18next } from 'react-i18next';
- import enUS from '../../internal/web/translation/en-US.json';
- if (!i18next.isInitialized) {
- void i18next.use(initReactI18next).init({
- lng: 'en-US',
- fallbackLng: 'en-US',
- resources: { 'en-US': { translation: enUS } },
- interpolation: { escapeValue: false, prefix: '{', suffix: '}' },
- returnNull: false,
- });
- }
- const withTheme: Decorator = (Story, context) => {
- const dark = context.globals.theme === 'dark';
- useEffect(() => {
- document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
- }, [dark]);
- return (
- <ConfigProvider theme={{ algorithm: dark ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm }}>
- <div style={{ padding: 24, minWidth: 320 }}>
- <Story />
- </div>
- </ConfigProvider>
- );
- };
- const preview: Preview = {
- decorators: [withTheme],
- globalTypes: {
- theme: {
- description: 'Ant Design theme',
- defaultValue: 'light',
- toolbar: {
- title: 'Theme',
- icon: 'circlehollow',
- items: [
- { value: 'light', title: 'Light' },
- { value: 'dark', title: 'Dark' },
- ],
- dynamicTitle: true,
- },
- },
- },
- parameters: {
- controls: {
- matchers: {
- color: /(background|color)$/i,
- date: /Date$/i,
- },
- },
- },
- };
- export default preview;
|