dumi-theme-antd-style
Version:
dumi-theme-antd-style 是为 dumi2 打造的一款文档站主题包,提供了更加美观、易用的研发与阅读体验
66 lines (65 loc) • 3.37 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
import { theme } from 'antd';
import { ThemeProvider, useTheme, useThemeMode } from 'antd-style';
import { useEffect, useState } from 'react';
import useControlledState from 'use-merge-value';
import { getAntdTheme } from "../../styles";
import { jsx as _jsx } from "react/jsx-runtime";
var DemoProvider = function DemoProvider(_ref) {
var children = _ref.children,
_ref$inheritSiteTheme = _ref.inheritSiteTheme,
inheritSiteTheme = _ref$inheritSiteTheme === void 0 ? false : _ref$inheritSiteTheme,
demoAppearance = _ref.demoAppearance;
var _useTheme = useTheme(),
isDarkMode = _useTheme.isDarkMode;
var defaultAlgorithm = inheritSiteTheme ? isDarkMode ? theme.darkAlgorithm : theme.defaultAlgorithm : undefined;
var _useThemeMode = useThemeMode(),
appearance = _useThemeMode.appearance;
var _useState = useState(appearance),
_useState2 = _slicedToArray(_useState, 2),
demoAppear = _useState2[0],
setAppear = _useState2[1];
var updateAppearance = function updateAppearance(value) {
if (value === 'auto') {
setAppear(appearance);
} else {
setAppear(value);
}
};
var _useControlledState = useControlledState(demoAppearance !== null && demoAppearance !== void 0 ? demoAppearance : 'auto', {
onChange: updateAppearance
}),
_useControlledState2 = _slicedToArray(_useControlledState, 2),
demoThemeMode = _useControlledState2[0],
setThemeMode = _useControlledState2[1];
useEffect(function () {
// 不是 auto 意味着 demo 外观已经被锁定,不允许切换
if (demoThemeMode !== 'auto') return;
// 如果 demo 主题设为 auto,那么就意味着 demo 外观会随着文档主题变化而变化
setAppear(appearance);
}, [demoThemeMode, appearance]);
return /*#__PURE__*/_jsx(ThemeProvider, {
prefixCls: inheritSiteTheme ? undefined : 'ant',
theme: inheritSiteTheme ? function (appearance) {
var antdTheme = getAntdTheme(appearance);
return _objectSpread(_objectSpread({}, antdTheme), {}, {
inherit: false
});
} : {
inherit: false,
algorithm: defaultAlgorithm
},
appearance: demoAppearance !== null && demoAppearance !== void 0 ? demoAppearance : demoAppear,
themeMode: demoThemeMode,
onThemeModeChange: function onThemeModeChange(mode) {
// 如果设定了 demo 外观,那么就不允许切换主题了
if (!!demoAppearance) return;
setThemeMode(mode);
},
children: children
});
};
export default DemoProvider;