ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
63 lines • 2.46 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
/* eslint-disable no-redeclare */
import { useStyleRegister } from '../../_util/cssinjs';
import { genCommonStyle, genLinkStyle } from '../../style';
import { mergeToken, statisticToken, useToken } from '../internal';
import { computed } from 'vue';
import { useConfigContextInject } from '../../config-provider/context';
export default function genComponentStyleHook(component, styleFn, getDefaultToken) {
return _prefixCls => {
const prefixCls = computed(() => _prefixCls === null || _prefixCls === void 0 ? void 0 : _prefixCls.value);
const [theme, token, hashId] = useToken();
const {
getPrefixCls,
iconPrefixCls
} = useConfigContextInject();
const rootPrefixCls = computed(() => getPrefixCls());
const sharedInfo = computed(() => {
return {
theme: theme.value,
token: token.value,
hashId: hashId.value,
path: ['Shared', rootPrefixCls.value]
};
});
// Generate style for all a tags in antd component.
useStyleRegister(sharedInfo, () => [{
// Link
'&': genLinkStyle(token.value)
}]);
const componentInfo = computed(() => {
return {
theme: theme.value,
token: token.value,
hashId: hashId.value,
path: [component, prefixCls.value, iconPrefixCls.value]
};
});
return [useStyleRegister(componentInfo, () => {
const {
token: proxyToken,
flush
} = statisticToken(token.value);
const defaultComponentToken = typeof getDefaultToken === 'function' ? getDefaultToken(proxyToken) : getDefaultToken;
const mergedComponentToken = _extends(_extends({}, defaultComponentToken), token.value[component]);
const componentCls = `.${prefixCls.value}`;
const mergedToken = mergeToken(proxyToken, {
componentCls,
prefixCls: prefixCls.value,
iconCls: `.${iconPrefixCls.value}`,
antCls: `.${rootPrefixCls.value}`
}, mergedComponentToken);
const styleInterpolation = styleFn(mergedToken, {
hashId: hashId.value,
prefixCls: prefixCls.value,
rootPrefixCls: rootPrefixCls.value,
iconPrefixCls: iconPrefixCls.value,
overrideComponentToken: token.value[component]
});
flush(component, mergedComponentToken);
return [genCommonStyle(token.value, prefixCls.value), styleInterpolation];
}), hashId];
};
}