e22cb1d06b
新增 PlatformModalCloseButton pixel 变体承接像素风关闭入口 将 UnifiedModal 头部关闭按钮迁移到 PlatformModalCloseButton 补充平台态和像素态关闭按钮测试 更新 PlatformUiKit 文档和 Hermes 决策记录
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import { X } from 'lucide-react';
|
|
import type { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
|
|
type PlatformModalCloseButtonVariant =
|
|
| 'profile'
|
|
| 'profileCompact'
|
|
| 'floating'
|
|
| 'floatingPlain'
|
|
| 'platformIcon'
|
|
| 'pixel'
|
|
| 'editorDark';
|
|
|
|
type PlatformModalCloseButtonProps = Omit<
|
|
ButtonHTMLAttributes<HTMLButtonElement>,
|
|
'children'
|
|
> & {
|
|
label: string;
|
|
variant?: PlatformModalCloseButtonVariant;
|
|
icon?: ReactNode;
|
|
};
|
|
|
|
const PLATFORM_MODAL_CLOSE_BUTTON_CLASS_BY_VARIANT: Record<
|
|
PlatformModalCloseButtonVariant,
|
|
string
|
|
> = {
|
|
profile:
|
|
'platform-modal-close flex h-9 w-9 items-center justify-center rounded-full',
|
|
profileCompact:
|
|
'platform-profile-icon-button flex h-8 w-8 items-center justify-center rounded-full',
|
|
floating:
|
|
'absolute right-3 top-3 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-white/80 text-[#ff4056] shadow-sm',
|
|
floatingPlain:
|
|
'absolute right-3 top-2 z-10 flex h-8 w-8 items-center justify-center rounded-full text-[#ff4056]',
|
|
platformIcon: 'platform-icon-button disabled:cursor-not-allowed disabled:opacity-45',
|
|
pixel:
|
|
'rounded-full border border-white/10 bg-black/20 p-2 text-zinc-400 transition-colors hover:text-white disabled:cursor-not-allowed disabled:opacity-45',
|
|
editorDark:
|
|
'platform-modal-close-button--editor-dark rounded-full border border-white/10 bg-white/5 p-2 text-zinc-300 transition hover:bg-white/10 hover:text-white',
|
|
};
|
|
|
|
/**
|
|
* 平台弹窗关闭按钮。
|
|
* 收口个人中心和平台浮层里重复的关闭 aria、尺寸和视觉样式。
|
|
*/
|
|
export function PlatformModalCloseButton({
|
|
label,
|
|
variant = 'profile',
|
|
icon = <X className="h-4 w-4" />,
|
|
className,
|
|
type = 'button',
|
|
...buttonProps
|
|
}: PlatformModalCloseButtonProps) {
|
|
return (
|
|
<button
|
|
{...buttonProps}
|
|
type={type}
|
|
aria-label={label}
|
|
className={[
|
|
PLATFORM_MODAL_CLOSE_BUTTON_CLASS_BY_VARIANT[variant],
|
|
className,
|
|
]
|
|
.filter(Boolean)
|
|
.join(' ')}
|
|
>
|
|
{icon}
|
|
</button>
|
|
);
|
|
}
|