描述bug
我有一个hosted storybook site,它只显示文档页面,我希望整个网站(侧边栏、预览等)都能根据用户的系统设置(浅色/深色模式)来显示。在Storybook Theming页面上,有一个视频指出,您可以在自定义主题中使用themes.normal
(来自@storybook/theming包),以便尊重用户的系统设置(浅色/深色模式)。这在我自定义主题(在manager.js中)中运行良好,但对我的文档页面内容不起作用。
从同一个Theming页面:它说,您可以通过将以下内容放入preview.js来主题化文档页面:
parameters: {
docs: {
theme: themes.dark,
},
},
这运行良好,但我想尊重用户的系统设置,所以我尝试再次使用themes.normal
,这次它不起作用 - 它总是显示浅色主题。您可以在此处看到实际操作:https://intl-tel-input.com/storybook
是否有办法让文档预览面板尊重用户的系统设置?
我找到了两个相关的插件:
https://storybook.js.org/addons/storybook-dark-mode
https://storybook.js.org/addons/@storybook/addon-themes
但是它们似乎都关注于给用户手动切换主题的能力,而这不是我想要的 - 我只想让它自动尊重用户的系统设置。
// manager.js
import { addons } from '@storybook/manager-api';
import { themes, create } from '@storybook/theming';
const customTheme = create({
base: themes.normal,
brandTitle: 'IntlTelInput Storybook',
brandUrl: 'https://intl-tel-input.com',
brandImage: 'https://intl-tel-input.com/img/logo.png',
brandTarget: '_self',
});
addons.setConfig({
showToolbar: false,
showPanel: false,
theme: customTheme,
});
// preview.js
import { themes } from '@storybook/theming';
/** @type { import('@storybook/react').Preview } */
const preview = {
parameters: {
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
docs: {
theme: themes.default,
},
},
};
export default preview;
复现链接
https://stackblitz.com/edit/github-ctbu1e?file=.storybook%2Fpreview.js
复现步骤
在您的preview.js中放入以下内容:
parameters: {
docs: {
theme: themes.normal,
},
},
我原以为这会尊重用户的系统设置(浅色/深色模式),但它始终使用浅色模式。
系统
Storybook Environment Info:
System:
OS: macOS 13.6.7
CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
Shell: 5.9 - /bin/zsh
Binaries:
Node: 20.11.0 - ~/.nvm/versions/node/v20.11.0/bin/node
npm: 10.2.4 - ~/.nvm/versions/node/v20.11.0/bin/npm <----- active
Browsers:
Chrome: 126.0.6478.183
Safari: 17.5
npmPackages:
@storybook/addon-essentials: ^8.2.5 => 8.2.5
@storybook/addon-interactions: ^8.2.5 => 8.2.5
@storybook/addon-links: ^8.2.5 => 8.2.5
@storybook/addon-mdx-gfm: ^8.2.5 => 8.2.5
@storybook/blocks: ^8.2.5 => 8.2.5
@storybook/manager-api: ^8.2.5 => 8.2.5
@storybook/react: ^8.2.5 => 8.2.5
@storybook/react-vite: ^8.2.5 => 8.2.5
@storybook/test: ^8.2.5 => 8.2.5
@storybook/theming: ^8.2.5 => 8.2.5
eslint-plugin-storybook: ^0.8.0 => 0.8.0
storybook: ^8.2.5 => 8.2.5
storybook-addon-deep-controls: ^0.6.2 => 0.6.2
附加上下文
- 无响应*
5条答案
按热度按时间eanckbw91#
免责声明:由于信息是自动生成的,可能存在不准确的情况。
要解决
themes.normal
在文档页面上无法正常工作的问题,请将您的.storybook/preview.js
更新为使用@storybook/theming
中的ensure
功能,以确保主题尊重用户的系统设置。以下是更新后的代码:参考文献
/docs/_snippets/storybook-preview-docs-dark-theme.md
/docs/_snippets/configure-mock-provider-with-story-parameter.md
/code/.storybook/preview.tsx
/.github/DISCUSSION_TEMPLATE/help.yml
/docs/_snippets/storybook-preview-auto-docs-override-theme.md
/code/deprecated/theming/package.json
/code/addons/themes/package.json
/code/core/src/manager/components/sidebar/Brand.tsx
/test-storybooks/external-docs/.storybook
/code/addons/themes/README.md
/code/core/scripts/helpers/modifyThemeTypes.ts
/code/renderers/server/template/cli/button.stories.json
/.github/DISCUSSION_TEMPLATE/ideas.yml
/docs/_snippets/mock-provider-in-preview.md
/code/presets/server-webpack/src/lib/compiler/testfixtures/backgrounds.json
/code/addons/themes
/docs/configure/user-interface/theming.mdx
/docs/_snippets/storybook-preview-with-angular-polyfills.md
/code/addons/themes/docs/getting-started
/code/addons/docs/template/stories/docspage
/code/presets/server-webpack/src/lib/compiler/testfixtures/kitchen_sink.snapshot
/code/addons/docs/ember
/code/core/src/theming/README.md
/docs/_snippets/your-theme.md
/code/frameworks/ember/src/client/preview/docs
关于Greptile
此响应为您提供研究的起点,而非精确解决方案。
帮助我们改进!如果这有帮助,请留下一个👍,如果无关紧要,请留下一个👎。
3okqufwl2#
你好,机器人。我尝试了你建议的方法,但在查看页面时出现了以下错误:"向颜色函数传递了错误的参数,请传递颜色的字符串表示形式。"
uinbv5nw3#
你好,@jackocnr!
从我看到的代码来看,
themes.normal
等同于themes.light
(参见 core/src/theming/create.ts#L11)。我们在下面的几行中获取用户偏好,所以根据这个偏好使
themes.normal
适应暗色或浅色主题应该不难。我会尽量在下周找时间修复这个问题。在此期间,你可以尝试以下解决方法:
iecba09b4#
这个方法非常有效,非常感谢@elisezhg的快速回复💐。
6ie5vjzr5#
这是一个Chan视频中的文档问题。据我所知,
themes.normal
已经存在一段时间了。