import { Button } from '@heroui/react' import { BarChart3, BellRing, Gamepad2, Gift } from 'lucide-react' import React from 'react' import { cn } from '../../../../utils/cn' import { EnhancedImage } from '../../components/shared' import type { BilibiliAdditionalData } from '../types' /** * B站预约卡片组件 */ export const BilibiliReserveCard: React.FC<{ reserve: NonNullable['reserve'] }> = ({ reserve }) => { if (!reserve) return null return (
{reserve.title}
{reserve.desc1} {reserve.desc2}
{reserve.desc3 && (
{reserve.desc3}
)}
) } /** * B站投票卡片组件 */ export const BilibiliVoteCard: React.FC<{ vote: NonNullable['vote'] }> = ({ vote }) => { if (!vote) return null const isEnded = vote.status === 4 return (
{vote.title}
{vote.desc}
) } /** * B站通用卡片组件(游戏等) */ export const BilibiliCommonCard: React.FC<{ common: NonNullable['common'] }> = ({ common }) => { if (!common) return null const getTagText = () => { if (common.sub_type === 'game') return '游戏' return common.desc1 } return (
{common.head_text && (
{common.head_text}
)}
{common.title}
{getTagText()} {common.sub_type === 'game' && common.desc1 && {common.desc1}}
{common.desc2 &&
{common.desc2}
}
{common.button_text && (
)}
) } /** * B站视频跳转卡片组件(UGC) */ export const BilibiliUgcCard: React.FC<{ ugc: NonNullable['ugc'] }> = ({ ugc }) => { if (!ugc) return null return (
{ugc.duration}
{ugc.title}
{ugc.play}播放 {ugc.danmaku}弹幕
) } /** * B站相关卡片容器组件 */ export const BilibiliAdditionalCard: React.FC<{ additional: BilibiliAdditionalData | undefined gap?: boolean className?: string }> = ({ additional, gap = true, className }) => { if (!additional) return null return (
{additional.type === 'ADDITIONAL_TYPE_RESERVE' && additional.reserve && } {additional.type === 'ADDITIONAL_TYPE_VOTE' && additional.vote && } {additional.type === 'ADDITIONAL_TYPE_COMMON' && additional.common && } {additional.type === 'ADDITIONAL_TYPE_UGC' && additional.ugc && }
) }