ant-design/components/select/style/token.ts

155 lines
4.0 KiB
TypeScript
Raw Normal View History

import type { CSSProperties } from 'react';
import type { FullToken, GetDefaultToken } from 'antd/es/theme/util/genComponentStyleHook';
export interface ComponentToken {
/**
* @desc z-index
* @descEN z-index of dropdown
*/
zIndexPopup: number;
/**
* @desc
* @descEN Text color when option is selected
*/
optionSelectedColor: string;
/**
* @desc
* @descEN Font weight when option is selected
*/
optionSelectedFontWeight: CSSProperties['fontWeight'];
/**
* @desc
* @descEN Background color when option is selected
*/
optionSelectedBg: string;
/**
* @desc
* @descEN Background color when option is active
*/
optionActiveBg: string;
/**
* @desc
* @descEN Padding of option
*/
optionPadding: CSSProperties['padding'];
/**
* @desc
* @descEN Font size of option
*/
optionFontSize: number;
/**
* @desc
* @descEN Line height of option
*/
optionLineHeight: CSSProperties['lineHeight'];
/**
* @desc
* @descEN Height of option
*/
optionHeight: number;
/**
* @desc
* @descEN Background color of selector
*/
selectorBg: string;
/**
* @desc
* @descEN Background color of clear button
*/
clearBg: string;
/**
* @desc
* @descEN Height of single selected item with large size
*/
singleItemHeightLG: number;
/**
* @desc
* @descEN Background color of multiple tag
*/
multipleItemBg: string;
/**
* @desc
* @descEN Border color of multiple tag
*/
multipleItemBorderColor: string;
/**
* @desc
* @descEN Height of multiple tag
*/
multipleItemHeight: number;
/**
* @desc
* @descEN Height of multiple tag with large size
*/
multipleItemHeightLG: number;
/**
* @desc
* @descEN Background color of multiple selector when disabled
*/
multipleSelectorBgDisabled: string;
/**
* @desc
* @descEN Text color of multiple tag when disabled
*/
multipleItemColorDisabled: string;
/**
* @desc
* @descEN Border color of multiple tag when disabled
*/
multipleItemBorderColorDisabled: string;
/**
* @internal
*/
showArrowPaddingInlineEnd: number;
}
export interface SelectToken extends FullToken<'Select'> {
rootPrefixCls: string;
inputPaddingHorizontalBase: number | string;
multipleSelectItemHeight: number;
selectHeight: number;
}
export const prepareComponentToken: GetDefaultToken<'Select'> = (token) => {
const {
fontSize,
lineHeight,
controlHeight,
controlPaddingHorizontal,
zIndexPopupBase,
colorText,
fontWeightStrong,
controlItemBgActive,
controlItemBgHover,
colorBgContainer,
colorFillSecondary,
controlHeightLG,
controlHeightSM,
colorBgContainerDisabled,
colorTextDisabled,
} = token;
return {
zIndexPopup: zIndexPopupBase + 50,
optionSelectedColor: colorText,
optionSelectedFontWeight: fontWeightStrong,
optionSelectedBg: controlItemBgActive,
optionActiveBg: controlItemBgHover,
optionPadding: `${(controlHeight - fontSize * lineHeight) / 2}px ${controlPaddingHorizontal}px`,
optionFontSize: fontSize,
optionLineHeight: lineHeight,
optionHeight: controlHeight,
selectorBg: colorBgContainer,
clearBg: colorBgContainer,
singleItemHeightLG: controlHeightLG,
multipleItemBg: colorFillSecondary,
multipleItemBorderColor: 'transparent',
multipleItemHeight: controlHeightSM,
multipleItemHeightLG: controlHeight,
multipleSelectorBgDisabled: colorBgContainerDisabled,
multipleItemColorDisabled: colorTextDisabled,
multipleItemBorderColorDisabled: 'transparent',
showArrowPaddingInlineEnd: Math.ceil(token.fontSize * 1.25),
};
};