diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index 4f79ce99a..b9c231781 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -1,5 +1,6 @@ import type { Preview } from '@storybook/react' -import React from 'react' +import { Suspense, useEffect } from 'react' +import { ThemeProvider, useTheme } from 'src/layout/ThemeContext' import i18n from 'src/locale/allTranslations' const preview: Preview = { @@ -13,15 +14,73 @@ const preview: Preview = { }, }, decorators: [ - (Story) => { - i18n + (Story, context) => { + const { locale, darkMode } = context.globals + return ( -
- -
+ + + + + + + ) }, ], } +export const globalTypes = { + locale: { + name: 'Locale', + description: 'Internationalization locale', + defaultValue: 'he', + toolbar: { + icon: 'globe', + items: [ + { value: 'he', title: 'עברית' }, + { value: 'en', title: 'English' }, + ], + showName: true, + }, + }, + darkMode: { + name: 'Dark Mode', + description: 'Enable dark mode', + defaultValue: false, + toolbar: { + icon: 'paintbrush', + items: [ + { value: false, title: 'Light' }, + { value: true, title: 'Dark' }, + ], + showName: true, + }, + }, +} + export default preview + +const StoryBookWrapper = ({ + darkMode, + locale, + children, +}: { + darkMode?: boolean + locale?: string + children: React.ReactNode +}) => { + const { isDarkTheme, toggleTheme } = useTheme() + + useEffect(() => { + if (isDarkTheme !== darkMode) { + toggleTheme() + } + }, [darkMode, isDarkTheme, toggleTheme]) + + useEffect(() => { + i18n.changeLanguage(locale) + }, [locale]) + + return children +} diff --git a/package-lock.json b/package-lock.json index 814629f42..63f6cdc40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5164,22 +5164,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/eslint-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx/eslint-plugin/node_modules/dotenv-expand": { "version": "11.0.7", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", @@ -23289,8 +23273,9 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", - "devOptional": true, "license": "ISC", + "optional": true, + "peer": true, "bin": { "yaml": "bin.mjs" },