2024-01-29 09:26:07 +08:00
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
2024-08-02 18:19:39 +08:00
|
|
|
exports.useThemeClass = useThemeClass;
|
2024-01-29 09:26:07 +08:00
|
|
|
const vue_1 = require("vue");
|
|
|
|
const css_render_1 = require("css-render");
|
|
|
|
const vue3_ssr_1 = require("@css-render/vue3-ssr");
|
|
|
|
const context_1 = require("../config-provider/src/context");
|
|
|
|
const _utils_1 = require("../_utils");
|
|
|
|
const cssr_1 = require("../_utils/cssr");
|
|
|
|
function useThemeClass(componentName, hashRef, cssVarsRef, props) {
|
|
|
|
var _a;
|
|
|
|
if (!cssVarsRef)
|
|
|
|
(0, _utils_1.throwError)('useThemeClass', 'cssVarsRef is not passed');
|
|
|
|
const mergedThemeHashRef = (_a = (0, vue_1.inject)(context_1.configProviderInjectionKey, null)) === null || _a === void 0 ? void 0 : _a.mergedThemeHashRef;
|
|
|
|
const themeClassRef = (0, vue_1.ref)('');
|
|
|
|
const ssrAdapter = (0, vue3_ssr_1.useSsrAdapter)();
|
|
|
|
let renderCallback;
|
|
|
|
const hashClassPrefix = `__${componentName}`;
|
|
|
|
const mountStyle = () => {
|
|
|
|
let finalThemeHash = hashClassPrefix;
|
|
|
|
const hashValue = hashRef ? hashRef.value : undefined;
|
|
|
|
const themeHash = mergedThemeHashRef === null || mergedThemeHashRef === void 0 ? void 0 : mergedThemeHashRef.value;
|
|
|
|
if (themeHash)
|
2024-08-02 18:19:39 +08:00
|
|
|
finalThemeHash += `-${themeHash}`;
|
2024-01-29 09:26:07 +08:00
|
|
|
if (hashValue)
|
2024-08-02 18:19:39 +08:00
|
|
|
finalThemeHash += `-${hashValue}`;
|
2024-01-29 09:26:07 +08:00
|
|
|
const { themeOverrides, builtinThemeOverrides } = props;
|
|
|
|
if (themeOverrides) {
|
2024-08-02 18:19:39 +08:00
|
|
|
finalThemeHash += `-${(0, css_render_1.hash)(JSON.stringify(themeOverrides))}`;
|
2024-01-29 09:26:07 +08:00
|
|
|
}
|
|
|
|
if (builtinThemeOverrides) {
|
2024-08-02 18:19:39 +08:00
|
|
|
finalThemeHash += `-${(0, css_render_1.hash)(JSON.stringify(builtinThemeOverrides))}`;
|
2024-01-29 09:26:07 +08:00
|
|
|
}
|
|
|
|
themeClassRef.value = finalThemeHash;
|
|
|
|
renderCallback = () => {
|
|
|
|
const cssVars = cssVarsRef.value;
|
|
|
|
let style = '';
|
|
|
|
for (const key in cssVars) {
|
|
|
|
style += `${key}: ${cssVars[key]};`;
|
|
|
|
}
|
|
|
|
(0, cssr_1.c)(`.${finalThemeHash}`, style).mount({
|
|
|
|
id: finalThemeHash,
|
|
|
|
ssr: ssrAdapter
|
|
|
|
});
|
|
|
|
renderCallback = undefined;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
(0, vue_1.watchEffect)(() => {
|
|
|
|
mountStyle();
|
|
|
|
});
|
|
|
|
return {
|
|
|
|
themeClass: themeClassRef,
|
|
|
|
onRender: () => {
|
|
|
|
renderCallback === null || renderCallback === void 0 ? void 0 : renderCallback();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|