import tinycolor from 'tinycolor2'; import { ComponentType, Defs, Group, Path, Rect } from '../../jsx'; import { ItemDesc, ItemIcon, ItemLabel, ShapesGroup } from '../components'; import { getItemProps } from '../utils'; import { registerItem } from './registry'; import type { BaseItemProps } from './types'; export interface RibbonCardProps extends BaseItemProps { width?: number; height?: number; iconSize?: number; gap?: number; ribbonHeight?: number; } export const RibbonCard: ComponentType = (props) => { const [ { datum, indexes, width = 240, height = 140, iconSize = 28, gap = 12, ribbonHeight = 32, themeColors, }, restProps, ] = getItemProps(props, [ 'width', 'height', 'iconSize', 'gap', 'ribbonHeight', ]); const gradientId = `${themeColors.colorPrimary}-ribbon`; return ( {/* 主背景 */} {/* 顶部彩带 */} {/* 彩带底部切角 */} {/* 彩带装饰三角 */} {/* 图标 */} {/* 标签 */} {datum.label} {/* 描述 */} {datum.desc} {/* 彩带上的小图标 */} ); }; registerItem('ribbon-card', { component: RibbonCard, composites: ['icon', 'label', 'desc'], });