// screens-dashboard.jsx — Home/Dashboard screen const { useState: _ds_useState, useEffect: _ds_useEffect, useMemo: _ds_useMemo } = React; function DashboardScreen({ ctx }){ const { user, lang, balance, premium, navigate, campaign, fortune, t: T, jobs } = ctx; const displayName = (user && (user.name || user.username)) || 'Mira'; const isLowBalance = balance.photo <= 5 && balance.video === 0; const showInvoice = campaign === 'invoice_reminder'; const showUpsell = campaign === 'post_result_upsell'; const showReactivation = campaign === 'reactivation'; return (
{/* Greeting + premium chip */}
{T('hello')}, {displayName}
{showReactivation ? T('reactivation_title') : showInvoice ? T('campaign_invoice_title') : showUpsell ? T('campaign_upsell_title') : T('start_action')}
{/* Campaign banner (AI image) */} {showReactivation &&
{T('reactivation_title')}
Premium queues, MultiFace, Image Gen, larger packages.
} {showInvoice &&
{T('campaign_invoice_title')}
{T('campaign_invoice_sub')}
} {showUpsell &&
{T('campaign_upsell_title')}
{T('campaign_upsell_sub')}
} {/* Balance pills */}
{balance.photo}
{T('photo_credits')}
{balance.video}min
{T('video_credits')}
{isLowBalance && (
{T('low_balance')}
)} {/* 3 Create CTAs */}
{ctx.features && ctx.features.fortune && } {/* Active jobs */} {jobs && jobs.length > 0 && ( <>

{T('active_jobs')}

{jobs.map(j => ( navigate('process', { jobId: j.id })}/> ))}
)} {/* Referral teaser */}
); } function FortuneWidget({ ctx }){ const { fortune, navigate, t: T } = ctx; const ready = fortune.dailyReady && fortune.spins === 0; const haveExtra = fortune.spins > 0; return (
Fortune
{haveExtra ? T('fortune_widget_spins', null, {n: fortune.spins}) : ready ? T('fortune_widget_ready') : T('fortune_widget_cooldown') + ' ' + fortune.cooldown}
{ready || haveExtra ? 'Premium AI rewards await' : 'Earn extra spin by inviting'}
); } function MiniWheel(){ return (
); } window.DashboardScreen = DashboardScreen; window.FortuneWidget = FortuneWidget;