@@ -272,10 +272,24 @@ export default function Apps() {
272272 placeholder = "https://forums.jtechforums.org/..."
273273 required
274274 />
275- < div className = "grid gap-4 md:grid-cols-2" >
276- < FileField label = "App icon" name = "icon" accept = "image/png,image/jpeg,image/webp" file = { files . icon } onChange = { handleFileChange } />
277- < FileField label = "APK file" name = "apk" accept = ".apk" file = { files . apk } onChange = { handleFileChange } />
278- </ div >
275+ < div className = "grid gap-4 md:grid-cols-2" >
276+ < FileField
277+ label = "App icon"
278+ name = "icon"
279+ accept = "image/png,image/jpeg,image/webp"
280+ file = { files . icon }
281+ onChange = { handleFileChange }
282+ helper = "PNG/JPG/WebP • 1024×1024 preferred • < 2 MB"
283+ />
284+ < FileField
285+ label = "APK file"
286+ name = "apk"
287+ accept = ".apk"
288+ file = { files . apk }
289+ onChange = { handleFileChange }
290+ helper = "Signed release build • max 200 MB"
291+ />
292+ </ div >
279293 < button
280294 type = "submit"
281295 disabled = { submissionStatus . state === 'loading' }
@@ -431,21 +445,22 @@ function InputField({ label, name, value, onChange, required, placeholder }) {
431445 ) ;
432446}
433447
434- function FileField ( { label, name, accept, onChange, file } ) {
448+ function FileField ( { label, name, accept, onChange, file, helper } ) {
435449 return (
436450 < div >
437451 < label htmlFor = { name } className = "text-sm font-semibold text-white" >
438452 { label }
439453 </ label >
440- < input
441- id = { name }
442- name = { name }
443- type = "file"
444- accept = { accept }
445- onChange = { onChange }
446- className = "mt-2 w-full rounded-2xl border border-dashed border-white/20 bg-black/10 px-4 py-3 text-sm text-white focus:border-sky-400 focus:outline-none"
447- />
448- { file && < p className = "mt-1 text-xs text-slate-300" > { file . name } </ p > }
454+ < label
455+ htmlFor = { name }
456+ className = "mt-2 flex cursor-pointer flex-col items-center justify-center rounded-3xl border border-dashed border-white/20 bg-slate-900/30 px-4 py-8 text-center text-sm text-white transition hover:border-sky-400 hover:bg-slate-900/60"
457+ >
458+ < i className = "fa-solid fa-cloud-arrow-up text-2xl text-sky-300" />
459+ < span className = "mt-2 font-semibold" > { file ? 'Replace file' : 'Click to upload' } </ span >
460+ { file && < span className = "mt-1 text-xs text-slate-300" > { file . name } </ span > }
461+ { helper && < span className = "mt-1 text-xs text-slate-400" > { helper } </ span > }
462+ </ label >
463+ < input id = { name } name = { name } type = "file" accept = { accept } onChange = { onChange } className = "hidden" />
449464 </ div >
450465 ) ;
451466}
0 commit comments