import tinycolor from 'tinycolor2'; import { ComponentType, Defs, Ellipse, Group, Text } from '../../jsx'; import { ItemIcon, ItemLabel } from '../components'; import { getItemProps } from '../utils'; import { registerItem } from './registry'; import type { BaseItemProps } from './types'; export interface IconBadgeProps extends BaseItemProps { size?: number; iconSize?: number; badgeSize?: number; gap?: number; } export const IconBadge: ComponentType = (props) => { const [ { datum, indexes, size = 80, iconSize = 28, badgeSize = 24, gap = 8, themeColors, width = 84, height = 105, }, restProps, ] = getItemProps(props, ['size', 'iconSize', 'badgeSize', 'gap']); const value = datum.value ?? 0; const gradientId = `${themeColors.colorPrimary}-icon`; const badgeGradientId = '#ff6b6b-badge'; return ( {/* 主圆形背景 */} {/* 图标 */} {/* 数值徽章 */} {/* 徽章数值 */} {value > 99 ? '99+' : Math.round(value)} {/* 标签 */} {datum.label} ); }; registerItem('icon-badge', { component: IconBadge, composites: ['icon', 'label'], });