preview.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // import 'reset-css';
  2. // import 'normalize.css';
  3. import React from 'react';
  4. import { StoryContext } from '@storybook/react';
  5. import { ConfigProvider } from '@douyinfe/semi-ui/index';
  6. import { ContextValue } from '@douyinfe/semi-ui/configProvider/context'
  7. import zh_CN from '@douyinfe/semi-ui/locale/source/zh_CN';
  8. import en_GB from '@douyinfe/semi-ui/locale/source/en_GB';
  9. import ko_KR from '@douyinfe/semi-ui/locale/source/ko_KR';
  10. import ja_JP from '@douyinfe/semi-ui/locale/source/ja_JP';
  11. import ar from '@douyinfe/semi-ui/locale/source/ar';
  12. import vi_VN from '@douyinfe/semi-ui/locale/source/vi_VN';
  13. import ru_RU from '@douyinfe/semi-ui/locale/source/ru_RU';
  14. import id_ID from '@douyinfe/semi-ui/locale/source/id_ID';
  15. import ms_MY from '@douyinfe/semi-ui/locale/source/ms_MY';
  16. import th_TH from '@douyinfe/semi-ui/locale/source/th_TH';
  17. import tr_TR from '@douyinfe/semi-ui/locale/source/tr_TR';
  18. import pt_BR from '@douyinfe/semi-ui/locale/source/pt_BR';
  19. import zh_TW from '@douyinfe/semi-ui/locale/source/zh_TW';
  20. import es from '@douyinfe/semi-ui/locale/source/es';
  21. import de from '@douyinfe/semi-ui/locale/source/de';
  22. import it from '@douyinfe/semi-ui/locale/source/it';
  23. import fr from '@douyinfe/semi-ui/locale/source/fr';
  24. export const globalTypes = {
  25. direction: {
  26. name: 'Direction',
  27. description: 'RTL direction',
  28. defaultValue: 'ltr',
  29. toolbar: {
  30. icon: 'globe',
  31. items: ['ltr', 'rtl'],
  32. },
  33. },
  34. theme: {
  35. name: 'Theme',
  36. description: 'Theme mode',
  37. defaultValue: 'light',
  38. toolbar: {
  39. icon: 'circle',
  40. items: ['light', 'dark'],
  41. },
  42. },
  43. language: {
  44. name: 'Locale',
  45. description: 'Locale language',
  46. defaultValue: 'zh_CN',
  47. toolbar: {
  48. icon: 'google',
  49. items: ['zh_CN', 'en_GB', 'ko_KR', 'ja_JP', 'ar', 'vi_VN', 'ru_RU', 'id_ID', 'ms_MY', 'th_TH', 'tr_TR', 'pt_BR', 'zh_TW', 'es', 'de', 'it', 'fr'],
  50. },
  51. }
  52. };
  53. const switchMode = (theme: 'light' | 'dark') => {
  54. const body = document.body;
  55. body.setAttribute('theme-mode', theme);
  56. };
  57. const getLocale = code => {
  58. let language = {
  59. zh_CN,
  60. en_GB,
  61. ko_KR,
  62. ja_JP,
  63. ar,
  64. vi_VN,
  65. ru_RU,
  66. id_ID,
  67. ms_MY,
  68. th_TH,
  69. tr_TR,
  70. pt_BR,
  71. zh_TW,
  72. es,
  73. de,
  74. it,
  75. fr
  76. };
  77. return language[code];
  78. };
  79. const withConfigProvider = (StoryFn: Function, context: StoryContext) => {
  80. const { direction, theme, language } = context.globals;
  81. const { componentId } = context;
  82. switchMode(theme);
  83. const locale = getLocale(language);
  84. let configProps: ContextValue = {
  85. direction,
  86. locale
  87. };
  88. if (['localeprovider'].includes(componentId)) {
  89. configProps.locale = null;
  90. }
  91. return (
  92. <ConfigProvider {...configProps}>
  93. <StoryFn />
  94. </ConfigProvider>
  95. );
  96. };
  97. export const decorators = [withConfigProvider];