// 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;