9141540c37
将充值结果弹窗和支付确认遮罩的图标槽迁移到共享 PlatformIconBadge 为 PlatformIconBadge 补充稳定类名并更新相关测试 同步更新 PlatformUiKit 收口文档与团队决策记录
86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
import type { ReactNode } from 'react';
|
|
|
|
type PlatformIconBadgeSize = 'xs' | 'sm' | 'base' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
type PlatformIconBadgeShape = 'circle' | 'rounded' | 'xl';
|
|
type PlatformIconBadgeTone =
|
|
| 'neutral'
|
|
| 'soft'
|
|
| 'softBright'
|
|
| 'hero'
|
|
| 'heroMuted'
|
|
| 'darkAmber'
|
|
| 'success'
|
|
| 'danger';
|
|
|
|
type PlatformIconBadgeProps = {
|
|
icon: ReactNode;
|
|
label?: string;
|
|
size?: PlatformIconBadgeSize;
|
|
shape?: PlatformIconBadgeShape;
|
|
tone?: PlatformIconBadgeTone;
|
|
className?: string;
|
|
};
|
|
|
|
const PLATFORM_ICON_BADGE_SIZE_CLASS: Record<PlatformIconBadgeSize, string> = {
|
|
xs: 'h-7 w-7',
|
|
sm: 'h-9 w-9',
|
|
base: 'h-10 w-10',
|
|
md: 'h-11 w-11',
|
|
lg: 'h-12 w-12',
|
|
xl: 'h-14 w-14',
|
|
xxl: 'h-20 w-20',
|
|
};
|
|
|
|
const PLATFORM_ICON_BADGE_SHAPE_CLASS: Record<PlatformIconBadgeShape, string> =
|
|
{
|
|
circle: 'rounded-full',
|
|
rounded: 'rounded-[0.85rem]',
|
|
xl: 'rounded-2xl',
|
|
};
|
|
|
|
const PLATFORM_ICON_BADGE_TONE_CLASS: Record<PlatformIconBadgeTone, string> = {
|
|
neutral:
|
|
'bg-[var(--platform-neutral-bg)] text-[var(--platform-neutral-text)]',
|
|
soft: 'bg-white/82 text-[var(--platform-text-strong)] shadow-sm',
|
|
softBright: 'bg-white/84 text-[var(--platform-text-strong)] shadow-sm',
|
|
hero: 'bg-white/18 text-white',
|
|
heroMuted: 'bg-white/18 text-white/72',
|
|
darkAmber: 'border border-amber-400/30 bg-amber-500/15 text-amber-50',
|
|
success:
|
|
'bg-[var(--platform-success-bg)] text-[var(--platform-success-text)]',
|
|
danger:
|
|
'bg-[var(--platform-button-danger-fill)] text-[var(--platform-button-danger-text)]',
|
|
};
|
|
|
|
/**
|
|
* 平台中性图标徽章。
|
|
* 统一承接弹窗标题、列表项和小卡片里的非交互图标槽。
|
|
*/
|
|
export function PlatformIconBadge({
|
|
icon,
|
|
label,
|
|
size = 'sm',
|
|
shape = 'circle',
|
|
tone = 'neutral',
|
|
className,
|
|
}: PlatformIconBadgeProps) {
|
|
return (
|
|
<span
|
|
aria-label={label}
|
|
aria-hidden={label ? undefined : true}
|
|
className={[
|
|
'platform-icon-badge',
|
|
'grid shrink-0 place-items-center',
|
|
PLATFORM_ICON_BADGE_SIZE_CLASS[size],
|
|
PLATFORM_ICON_BADGE_SHAPE_CLASS[shape],
|
|
PLATFORM_ICON_BADGE_TONE_CLASS[tone],
|
|
className,
|
|
]
|
|
.filter(Boolean)
|
|
.join(' ')}
|
|
>
|
|
{icon}
|
|
</span>
|
|
);
|
|
}
|