winbox-ui-next
Version:
We Design Vue 2.0: A Vue.js 3 UI Library
64 lines (63 loc) • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports[Symbol.toStringTag] = "Module";
var vue = require("vue");
var cssRender = require("css-render");
var vue3Ssr = require("@css-render/vue3-ssr");
var context = require("../config-provider/src/context.js");
var warn = require("../_utils/naive/warn.js");
require("../_utils/vue/wrapper.js");
var index = require("../_utils/cssr/index.js");
require("../_utils/composable/use-adjusted-to.js");
require("vueuc");
require("../_utils/composable/use-lock-html-scroll.js");
require("../_utils/composable/use-is-composing.js");
function useThemeClass(componentName, hashRef, cssVarsRef, props) {
var _a;
if (!cssVarsRef)
warn.throwError("useThemeClass", "cssVarsRef is not passed");
const mergedThemeHashRef = (_a = vue.inject(context.configProviderInjectionKey, null)) == null ? void 0 : _a.mergedThemeHashRef;
const themeClassRef = vue.ref("");
const ssrAdapter = vue3Ssr.useSsrAdapter();
let renderCallback;
const hashClassPrefix = `__${componentName}`;
const mountStyle = () => {
let finalThemeHash = hashClassPrefix;
const hashValue = hashRef ? hashRef.value : void 0;
const themeHash = mergedThemeHashRef == null ? void 0 : mergedThemeHashRef.value;
if (themeHash)
finalThemeHash += `-${themeHash}`;
if (hashValue)
finalThemeHash += `-${hashValue}`;
const { themeOverrides, builtinThemeOverrides } = props;
if (themeOverrides) {
finalThemeHash += `-${cssRender.hash(JSON.stringify(themeOverrides))}`;
}
if (builtinThemeOverrides) {
finalThemeHash += `-${cssRender.hash(JSON.stringify(builtinThemeOverrides))}`;
}
themeClassRef.value = finalThemeHash;
renderCallback = () => {
const cssVars = cssVarsRef.value;
let style = "";
for (const key in cssVars) {
style += `${key}: ${cssVars[key]};`;
}
index.c(`.${finalThemeHash}`, style).mount({
id: finalThemeHash,
ssr: ssrAdapter
});
renderCallback = void 0;
};
};
vue.watchEffect(() => {
mountStyle();
});
return {
themeClass: themeClassRef,
onRender: () => {
renderCallback == null ? void 0 : renderCallback();
}
};
}
exports.useThemeClass = useThemeClass;