ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
30 lines (29 loc) • 1.64 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useTheme;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _internal = require("../../theme/internal");
var _vue = require("vue");
function useTheme(theme, parentTheme) {
const themeConfig = (0, _vue.computed)(() => (theme === null || theme === void 0 ? void 0 : theme.value) || {});
const parentThemeConfig = (0, _vue.computed)(() => themeConfig.value.inherit === false || !(parentTheme === null || parentTheme === void 0 ? void 0 : parentTheme.value) ? _internal.defaultConfig : parentTheme.value);
const mergedTheme = (0, _vue.computed)(() => {
if (!(theme === null || theme === void 0 ? void 0 : theme.value)) {
return parentTheme === null || parentTheme === void 0 ? void 0 : parentTheme.value;
}
// Override
const mergedComponents = (0, _extends2.default)({}, parentThemeConfig.value.components);
Object.keys(theme.value.components || {}).forEach(componentName => {
mergedComponents[componentName] = (0, _extends2.default)((0, _extends2.default)({}, mergedComponents[componentName]), theme.value.components[componentName]);
});
// Base token
return (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({}, parentThemeConfig.value), themeConfig.value), {
token: (0, _extends2.default)((0, _extends2.default)({}, parentThemeConfig.value.token), themeConfig.value.token),
components: mergedComponents
});
});
return mergedTheme;
}
;