2023-08-17 15:03:23 +08:00
|
|
|
|
import type { CSSProperties } from 'react';
|
2023-09-26 17:34:49 +08:00
|
|
|
|
|
2022-10-28 16:09:38 +08:00
|
|
|
|
import { genCompactItemStyle } from '../../style/compact-item';
|
2023-09-26 17:34:49 +08:00
|
|
|
|
import type { GlobalToken } from '../../theme';
|
2023-07-05 17:49:59 +08:00
|
|
|
|
import type { FullToken, GenerateStyle } from '../../theme/internal';
|
|
|
|
|
import { genComponentStyleHook } from '../../theme/internal';
|
2023-09-26 17:34:49 +08:00
|
|
|
|
import getColumnsStyle from './columns';
|
2022-03-09 00:29:00 +08:00
|
|
|
|
|
2022-03-29 15:57:39 +08:00
|
|
|
|
export interface ComponentToken {
|
2023-07-05 17:49:59 +08:00
|
|
|
|
/**
|
|
|
|
|
* @desc 选择器宽度
|
|
|
|
|
* @descEN Width of Cascader
|
|
|
|
|
*/
|
2022-03-29 15:57:39 +08:00
|
|
|
|
controlWidth: number;
|
2023-07-05 17:49:59 +08:00
|
|
|
|
/**
|
|
|
|
|
* @desc 选项宽度
|
|
|
|
|
* @descEN Width of item
|
|
|
|
|
*/
|
2022-03-29 15:57:39 +08:00
|
|
|
|
controlItemWidth: number;
|
2023-07-05 17:49:59 +08:00
|
|
|
|
/**
|
|
|
|
|
* @desc 下拉菜单高度
|
|
|
|
|
* @descEN Height of dropdown
|
|
|
|
|
*/
|
2022-03-29 15:57:39 +08:00
|
|
|
|
dropdownHeight: number;
|
2023-08-17 15:03:23 +08:00
|
|
|
|
/**
|
|
|
|
|
* @desc 选项选中时背景色
|
|
|
|
|
* @descEN Background color of selected item
|
|
|
|
|
*/
|
|
|
|
|
optionSelectedBg: string;
|
|
|
|
|
/**
|
|
|
|
|
* @desc 选项选中时字重
|
|
|
|
|
* @descEN Font weight of selected item
|
|
|
|
|
*/
|
|
|
|
|
optionSelectedFontWeight: CSSProperties['fontWeight'];
|
|
|
|
|
/**
|
|
|
|
|
* @desc 选项内间距
|
|
|
|
|
* @descEN Padding of menu item
|
|
|
|
|
*/
|
|
|
|
|
optionPadding: CSSProperties['padding'];
|
|
|
|
|
/**
|
|
|
|
|
* @desc 选项菜单(单列)内间距
|
|
|
|
|
* @descEN Padding of menu item (single column)
|
|
|
|
|
*/
|
|
|
|
|
menuPadding: CSSProperties['padding'];
|
2022-03-29 15:57:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-26 17:34:49 +08:00
|
|
|
|
export type CascaderToken = FullToken<'Cascader'>;
|
2022-03-09 00:29:00 +08:00
|
|
|
|
|
|
|
|
|
// =============================== Base ===============================
|
2022-11-17 23:31:41 +08:00
|
|
|
|
const genBaseStyle: GenerateStyle<CascaderToken> = (token) => {
|
2023-09-26 17:34:49 +08:00
|
|
|
|
const { componentCls, antCls } = token;
|
2022-03-09 00:29:00 +08:00
|
|
|
|
|
|
|
|
|
return [
|
|
|
|
|
// =====================================================
|
|
|
|
|
// == Control ==
|
|
|
|
|
// =====================================================
|
|
|
|
|
{
|
2022-04-02 22:55:02 +08:00
|
|
|
|
[componentCls]: {
|
2022-03-29 15:57:39 +08:00
|
|
|
|
width: token.controlWidth,
|
2022-03-09 00:29:00 +08:00
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
// =====================================================
|
|
|
|
|
// == Popup ==
|
|
|
|
|
// =====================================================
|
|
|
|
|
{
|
2022-04-02 22:55:02 +08:00
|
|
|
|
[`${componentCls}-dropdown`]: [
|
2022-09-09 17:47:17 +08:00
|
|
|
|
{
|
|
|
|
|
[`&${antCls}-select-dropdown`]: {
|
|
|
|
|
padding: 0,
|
|
|
|
|
},
|
|
|
|
|
},
|
2023-09-26 17:34:49 +08:00
|
|
|
|
getColumnsStyle(token),
|
2022-03-09 15:33:39 +08:00
|
|
|
|
],
|
2022-03-09 00:29:00 +08:00
|
|
|
|
},
|
|
|
|
|
// =====================================================
|
|
|
|
|
// == RTL ==
|
|
|
|
|
// =====================================================
|
|
|
|
|
{
|
2022-04-02 22:55:02 +08:00
|
|
|
|
[`${componentCls}-dropdown-rtl`]: {
|
2022-03-09 00:29:00 +08:00
|
|
|
|
direction: 'rtl',
|
|
|
|
|
},
|
|
|
|
|
},
|
2022-12-12 16:36:46 +08:00
|
|
|
|
// =====================================================
|
|
|
|
|
// == Space Compact ==
|
|
|
|
|
// =====================================================
|
|
|
|
|
genCompactItemStyle(token),
|
2022-03-09 00:29:00 +08:00
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// ============================== Export ==============================
|
2023-09-26 17:34:49 +08:00
|
|
|
|
export const prepareComponentToken = (token: GlobalToken) => {
|
|
|
|
|
const itemPaddingVertical = Math.round(
|
|
|
|
|
(token.controlHeight - token.fontSize * token.lineHeight) / 2,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
controlWidth: 184,
|
|
|
|
|
controlItemWidth: 111,
|
|
|
|
|
dropdownHeight: 180,
|
|
|
|
|
optionSelectedBg: token.controlItemBgActive,
|
|
|
|
|
optionSelectedFontWeight: token.fontWeightStrong,
|
|
|
|
|
optionPadding: `${itemPaddingVertical}px ${token.paddingSM}px`,
|
|
|
|
|
menuPadding: token.paddingXXS,
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2023-08-17 15:03:23 +08:00
|
|
|
|
export default genComponentStyleHook(
|
|
|
|
|
'Cascader',
|
|
|
|
|
(token) => [genBaseStyle(token)],
|
2023-09-26 17:34:49 +08:00
|
|
|
|
prepareComponentToken,
|
2023-08-17 15:03:23 +08:00
|
|
|
|
);
|