128 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import type { CSSObject } from '../../_util/cssinjs';
 | |
| import type { FullToken, GenerateStyle } from '../../theme/internal';
 | |
| import { genComponentStyleHook, mergeToken } from '../../theme/internal';
 | |
| import { genFocusStyle, resetComponent } from '../../style';
 | |
| 
 | |
| interface BreadcrumbToken extends FullToken<'Breadcrumb'> {
 | |
|   breadcrumbBaseColor: string;
 | |
|   breadcrumbFontSize: number;
 | |
|   breadcrumbIconFontSize: number;
 | |
|   breadcrumbLinkColor: string;
 | |
|   breadcrumbLinkColorHover: string;
 | |
|   breadcrumbLastItemColor: string;
 | |
|   breadcrumbSeparatorMargin: number;
 | |
|   breadcrumbSeparatorColor: string;
 | |
| }
 | |
| 
 | |
| const genBreadcrumbStyle: GenerateStyle<BreadcrumbToken, CSSObject> = token => {
 | |
|   const { componentCls, iconCls } = token;
 | |
| 
 | |
|   return {
 | |
|     [componentCls]: {
 | |
|       ...resetComponent(token),
 | |
|       color: token.breadcrumbBaseColor,
 | |
|       fontSize: token.breadcrumbFontSize,
 | |
| 
 | |
|       [iconCls]: {
 | |
|         fontSize: token.breadcrumbIconFontSize,
 | |
|       },
 | |
| 
 | |
|       ol: {
 | |
|         display: 'flex',
 | |
|         flexWrap: 'wrap',
 | |
|         margin: 0,
 | |
|         padding: 0,
 | |
|         listStyle: 'none',
 | |
|       },
 | |
| 
 | |
|       a: {
 | |
|         color: token.breadcrumbLinkColor,
 | |
|         transition: `color ${token.motionDurationMid}`,
 | |
|         padding: `0 ${token.paddingXXS}px`,
 | |
|         borderRadius: token.borderRadiusSM,
 | |
|         height: token.lineHeight * token.fontSize,
 | |
|         display: 'inline-block',
 | |
|         marginInline: -token.marginXXS,
 | |
| 
 | |
|         '&:hover': {
 | |
|           color: token.breadcrumbLinkColorHover,
 | |
|           backgroundColor: token.colorBgTextHover,
 | |
|         },
 | |
| 
 | |
|         ...genFocusStyle(token),
 | |
|       },
 | |
| 
 | |
|       [`li:last-child`]: {
 | |
|         color: token.breadcrumbLastItemColor,
 | |
| 
 | |
|         [`& > ${componentCls}-separator`]: {
 | |
|           display: 'none',
 | |
|         },
 | |
|       },
 | |
| 
 | |
|       [`${componentCls}-separator`]: {
 | |
|         marginInline: token.breadcrumbSeparatorMargin,
 | |
|         color: token.breadcrumbSeparatorColor,
 | |
|       },
 | |
| 
 | |
|       [`${componentCls}-link`]: {
 | |
|         [`
 | |
|           > ${iconCls} + span,
 | |
|           > ${iconCls} + a
 | |
|         `]: {
 | |
|           marginInlineStart: token.marginXXS,
 | |
|         },
 | |
|       },
 | |
| 
 | |
|       [`${componentCls}-overlay-link`]: {
 | |
|         borderRadius: token.borderRadiusSM,
 | |
|         height: token.lineHeight * token.fontSize,
 | |
|         display: 'inline-block',
 | |
|         padding: `0 ${token.paddingXXS}px`,
 | |
|         marginInline: -token.marginXXS,
 | |
| 
 | |
|         [`> ${iconCls}`]: {
 | |
|           marginInlineStart: token.marginXXS,
 | |
|           fontSize: token.fontSizeIcon,
 | |
|         },
 | |
| 
 | |
|         '&:hover': {
 | |
|           color: token.breadcrumbLinkColorHover,
 | |
|           backgroundColor: token.colorBgTextHover,
 | |
| 
 | |
|           a: {
 | |
|             color: token.breadcrumbLinkColorHover,
 | |
|           },
 | |
|         },
 | |
| 
 | |
|         a: {
 | |
|           '&:hover': {
 | |
|             backgroundColor: 'transparent',
 | |
|           },
 | |
|         },
 | |
|       },
 | |
| 
 | |
|       // rtl style
 | |
|       [`&${token.componentCls}-rtl`]: {
 | |
|         direction: 'rtl',
 | |
|       },
 | |
|     },
 | |
|   };
 | |
| };
 | |
| 
 | |
| // ============================== Export ==============================
 | |
| export default genComponentStyleHook('Breadcrumb', token => {
 | |
|   const BreadcrumbToken = mergeToken<BreadcrumbToken>(token, {
 | |
|     breadcrumbBaseColor: token.colorTextDescription,
 | |
|     breadcrumbFontSize: token.fontSize,
 | |
|     breadcrumbIconFontSize: token.fontSize,
 | |
|     breadcrumbLinkColor: token.colorTextDescription,
 | |
|     breadcrumbLinkColorHover: token.colorText,
 | |
|     breadcrumbLastItemColor: token.colorText,
 | |
|     breadcrumbSeparatorMargin: token.marginXS,
 | |
|     breadcrumbSeparatorColor: token.colorTextDescription,
 | |
|   });
 | |
| 
 | |
|   return [genBreadcrumbStyle(BreadcrumbToken)];
 | |
| });
 |