{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4d03-70e3-bd9c-a5fa3a624c0e","file":"72.v-YKFw0i.mjs","mappings":"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","names":["onMount","activeMode","IMAGE_MIME","VIDEO_MIME","IMAGE_MAX","VIDEO_MAX","UPLOAD_TIMEOUT_MS","STAKES","file","$.state","savePhoto","fileInput","stake","submitting","error","dragOver","fileLabel","$.derived","$.get","size","t","canAfford","$$props","validateFile","f","isImage","isVideo","acceptFile","raw","$.set","isHeic","heicToJpeg","err","fail","pickFailure","trackUploadFail","v","useSavedPhoto","blob","submit","clean","stripExifClient","fd","controller","timer","res","isJson","body","goto","e","main","root","$.head","$$anchor","$0","BeatTabs","node","section","$.sibling","div","div_1","h1","p","a","root_2","$.template_effect","$.set_text","text_2","form","root_3","betUpload","label","root_4","input","$.child","$$value","div_2","root_5","div_3","p_1","p_2","span","text_3","text_4","p_3","$.first_child","fragment","p_4","$$render","consequent_1","alternate","$.reset","$.set_class","$.event","$.append","node_3","ReusePhoto","div_4","span_1","span_2","b","text_9","div_5","$.each","s","button","root_7","text_11","p_5","$.index","part","i","b_1","root_9","consequent_2","p_6","root_10","consequent_3","button_1","node_5","node_6","text_15","text_16","alternate_1","consequent_5","alternate_2","consequent"],"sources":["../../../../../../src/routes/b/bet/start/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\timport { onMount } from 'svelte';\n\timport { goto } from '$app/navigation';\n\timport { stripExifClient } from '$lib/utils/strip-exif-client';\n\timport { heicToJpeg, isHeic } from '$lib/utils/heic-to-jpeg';\n\timport { pickFailure } from '$lib/utils/stale-file';\n\timport { trackUploadFail } from '$lib/analytics';\n\timport { activeMode } from '$lib/stores/activeMode';\n\timport BeatTabs from '$lib/components/beat/BeatTabs.svelte';\n\timport ReusePhoto from '$lib/components/ReusePhoto.svelte';\n\timport type { PageData } from './$types';\n\n\tlet { data }: { data: PageData } = $props();\n\n\tonMount(() => {\n\t\tactiveMode.set('beat');\n\t\treturn () => activeMode.set(null);\n\t});\n\n\tconst IMAGE_MIME = ['image/jpeg', 'image/png', 'image/webp'];\n\tconst VIDEO_MIME = ['video/mp4', 'video/webm', 'video/quicktime'];\n\tconst IMAGE_MAX = 5 * 1024 * 1024;\n\tconst VIDEO_MAX = 30 * 1024 * 1024;\n\tconst UPLOAD_TIMEOUT_MS = 60_000;\n\tconst STAKES = [10, 25, 50, 100];\n\n\tlet file = $state<File | null>(null);\n\tlet savePhoto = $state(true);\n\tlet fileInput = $state<HTMLInputElement | null>(null);\n\tlet stake = $state(25);\n\tlet submitting = $state(false);\n\tlet error = $state('');\n\tlet dragOver = $state(false);\n\n\tconst fileLabel = $derived.by(() => {\n\t\tif (!file) return null;\n\t\tconst size = file.size > 1024 * 1024 ? `${(file.size / 1024 / 1024).toFixed(1)} MB` : `${Math.ceil(file.size / 1024)} KB`;\n\t\treturn { name: file.name, size, kind: file.type.startsWith('video/') ? t('video') : t('image') };\n\t});\n\tconst canAfford = $derived(data.credits >= stake);\n\n\tfunction validateFile(f: File): string | null {\n\t\tconst isImage = IMAGE_MIME.includes(f.type);\n\t\tconst isVideo = VIDEO_MIME.includes(f.type);\n\t\tif (!isImage && !isVideo) return t('unsupported file — use jpg/png/webp or mp4/webm/mov');\n\t\tif (f.size > (isVideo ? VIDEO_MAX : IMAGE_MAX)) return t('file too large (max {size})', { size: isVideo ? '30MB' : '5MB' });\n\t\treturn null;\n\t}\n\n\tasync function acceptFile(raw: File | null | undefined) {\n\t\tif (!raw) {\n\t\t\tfile = null;\n\t\t\terror = '';\n\t\t\treturn;\n\t\t}\n\t\tlet f = raw;\n\t\t// The HEIC sniff reads the file, and a file that can't be read at all\n\t\t// throws there — said, not dropped (see pickFailure).\n\t\ttry {\n\t\t\tif (await isHeic(f)) {\n\t\t\t\terror = t('converting heic photo…');\n\t\t\t\tf = await heicToJpeg(f);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst fail = pickFailure(err);\n\t\t\ttrackUploadFail({ error: fail.error, context: 'bet_pick', stale: fail.stale });\n\t\t\terror = fail.message;\n\t\t\tfile = null;\n\t\t\treturn;\n\t\t}\n\t\tconst v = validateFile(f);\n\t\tif (v) {\n\t\t\terror = v;\n\t\t\tfile = null;\n\t\t\treturn;\n\t\t}\n\t\tfile = f;\n\t\terror = '';\n\t}\n\n\t// Photo reuse: pull the saved photo down as a File, then go straight to posting —\n\t// the stake is already set above, so a \"selected file\" step is redundant.\n\tasync function useSavedPhoto() {\n\t\tif (!data.lastPhotoUrl) return;\n\t\ttry {\n\t\t\tconst res = await fetch(data.lastPhotoUrl);\n\t\t\tconst blob = await res.blob();\n\t\t\tfile = new File([blob], 'reused.jpg', { type: blob.type || 'image/jpeg' });\n\t\t\terror = '';\n\t\t} catch {\n\t\t\terror = t('could not load your saved photo — upload a new one.');\n\t\t\treturn;\n\t\t}\n\t\tawait submit();\n\t}\n\n\tasync function submit() {\n\t\tif (!file || submitting || !canAfford) return;\n\t\tconst v = validateFile(file);\n\t\tif (v) {\n\t\t\terror = v;\n\t\t\treturn;\n\t\t}\n\t\tsubmitting = true;\n\t\terror = '';\n\t\tconst clean = await stripExifClient(file);\n\t\tconst fd = new FormData();\n\t\tfd.append('file', clean);\n\t\tfd.append('stake', String(stake));\n\t\tfd.append('savePhoto', savePhoto ? 'true' : 'false');\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), UPLOAD_TIMEOUT_MS);\n\t\ttry {\n\t\t\tconst res = await fetch('/api/bet/start', { method: 'POST', body: fd, signal: controller.signal });\n\t\t\tconst ct = res.headers.get('content-type') ?? '';\n\t\t\tconst isJson = ct.includes('application/json');\n\t\t\tif (!res.ok) {\n\t\t\t\tif (isJson) {\n\t\t\t\t\tconst body = await res.json().catch(() => ({}));\n\t\t\t\t\terror = body.error || t('failed ({status})', { status: res.status });\n\t\t\t\t} else error = res.status === 413 ? t('file too large for upload') : t('failed ({status})', { status: res.status });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst body = await res.json();\n\t\t\tawait goto(`/b/bet/${body.code}`);\n\t\t} catch (e) {\n\t\t\terror = e instanceof DOMException && e.name === 'AbortError' ? t('upload timed out — try a smaller file') : t('network error');\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t\tsubmitting = false;\n\t\t}\n\t}\n</script>\n\n<svelte:head><title>{t('start a bet · beat me')}</title></svelte:head>\n\n<main class=\"relative overflow-hidden pt-20 pb-32 md:pt-28\">\n\t<div class=\"pointer-events-none absolute -top-40 -right-40 hidden h-[500px] w-[500px] rounded-full bg-yellow/[.04] blur-[150px] md:block\"></div>\n\t<BeatTabs active=\"bet\" />\n\n\t<section class=\"relative mt-8 md:mt-10\">\n\t\t<div class=\"mx-auto w-full max-w-5xl px-5 md:px-0\">\n\t\t\t<div class=\"max-w-xl\">\n\t\t\t<h1 class=\"font-display text-[clamp(2rem,7vw,3.4rem)] font-bold leading-[0.95] tracking-tight\">{t('start a bet.')}</h1>\n\t\t\t<p class=\"mt-3 text-sm leading-relaxed text-muted md:text-base\">{t('upload, set your stake. whoever matches it is your opponent — winner takes the pot + 15% of the bets.')}</p>\n\n\t\t\t{#if !data.loggedIn}\n\t\t\t\t<a href=\"/auth/sign-in\" class=\"mt-6 inline-flex items-center justify-center rounded-xl bg-yellow px-6 py-3 font-display text-sm font-bold tracking-tight text-bg no-underline\">{t('sign in to bet →')}</a>\n\t\t\t{:else}\n\t\t\t\t<form\n\t\t\t\t\tonsubmit={(e) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsubmit();\n\t\t\t\t\t}}\n\t\t\t\t\tclass=\"mt-6\"\n\t\t\t\t>\n\t\t\t\t\t{#snippet betUpload()}\n\t\t\t\t\t<label\n\t\t\t\t\t\tclass=\"block cursor-pointer rounded-2xl border transition-all duration-300 {fileLabel ? 'px-4 py-4' : 'px-6 py-10'} {dragOver\n\t\t\t\t\t\t\t? 'border-yellow/40 bg-yellow/[.03]'\n\t\t\t\t\t\t\t: file\n\t\t\t\t\t\t\t\t? 'border-yellow/40 bg-surface'\n\t\t\t\t\t\t\t\t: 'border-border bg-surface hover:border-muted'}\"\n\t\t\t\t\t\tondrop={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tdragOver = false;\n\t\t\t\t\t\t\tacceptFile(e.dataTransfer?.files?.[0]);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tondragover={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tdragOver = true;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tondragleave={() => (dragOver = false)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input type=\"file\" accept=\"image/*,video/*\" class=\"hidden\" bind:this={fileInput} onchange={(e) => acceptFile(e.currentTarget.files?.[0])} />\n\t\t\t\t\t\t{#if fileLabel}\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t<div class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-yellow/40 bg-yellow/10 text-yellow\">\n\t\t\t\t\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\" /></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t<p class=\"truncate font-display text-sm font-bold\">{fileLabel.name}</p>\n\t\t\t\t\t\t\t\t\t<p class=\"text-xs text-muted\">{fileLabel.kind} · {fileLabel.size}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<span class=\"shrink-0 text-xs font-medium text-yellow\">{t('change')}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<div class=\"mx-auto flex h-11 w-11 items-center justify-center rounded-xl border border-border bg-bg text-muted\">\n\t\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5\" /></svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p class=\"mt-3 text-center font-display text-base font-bold\">{t('drag & drop here')}</p>\n\t\t\t\t\t\t\t<p class=\"mt-1 text-center text-xs text-muted\">{t('jpg / png / webp · 5MB · or mp4 / webm up to 30MB')}</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</label>\n\t\t\t\t\t{/snippet}\n\n\t\t\t\t\t<ReusePhoto\n\t\t\t\t\t\tloggedIn={data.loggedIn}\n\t\t\t\t\t\tlastPhotoUrl={data.lastPhotoUrl ?? null}\n\t\t\t\t\t\tothers=\"Arena\"\n\t\t\t\t\t\tuseBtnClass=\"bg-yellow text-bg\"\n\t\t\t\t\t\ttoggleOnClass=\"bg-yellow\"\n\t\t\t\t\t\tsaveMode={file && file.type.startsWith('video/') ? 'none' : 'toggle'}\n\t\t\t\t\t\thasSelection={!!file}\n\t\t\t\t\t\tbind:save={savePhoto}\n\t\t\t\t\t\tonBack={() => (file = null)}\n\t\t\t\t\t\tonUseSaved={useSavedPhoto}\n\t\t\t\t\t\tupload={betUpload}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<div class=\"mt-5 flex items-center justify-between\">\n\t\t\t\t\t\t<span class=\"font-mono text-[10px] tracking-[0.24em] text-coral uppercase\">{t('your stake')}</span>\n\t\t\t\t\t\t<span class=\"text-[11px] text-muted\">{t('balance')} <b class=\"font-display text-text\"><span class=\"bet-coin-sm\"></span> {data.credits}</b></span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mt-2 grid grid-cols-4 gap-2\">\n\t\t\t\t\t\t{#each STAKES as s (s)}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonclick={() => (stake = s)}\n\t\t\t\t\t\t\t\tclass=\"flex items-center justify-center gap-1 rounded-lg border py-3 font-display text-sm font-bold transition-colors {stake === s\n\t\t\t\t\t\t\t\t\t? 'border-yellow bg-yellow/[.06] text-text'\n\t\t\t\t\t\t\t\t\t: 'border-border bg-bg text-muted hover:text-text'}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"bet-coin-sm\"></span>{s}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"mt-2 text-[11px] text-muted\">{#each t('opponent must match {stake} · escrowed when you post.').split('{stake}') as part, i (i)}{#if i}<b class=\"text-text\">{stake}</b>{/if}{part}{/each}</p>\n\n\t\t\t\t\t{#if error}\n\t\t\t\t\t\t<p class=\"mt-4 rounded-lg border border-coral/30 bg-coral/[.08] px-3 py-2.5 text-xs text-coral\">{error}</p>\n\t\t\t\t\t{/if}\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tdisabled={!file || submitting || !canAfford}\n\t\t\t\t\t\tclass=\"submit-btn mt-5 inline-flex w-full items-center justify-center gap-2 rounded-xl bg-yellow px-6 py-4 font-display text-sm font-bold tracking-tight text-bg disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if submitting}\n\t\t\t\t\t\t\t{t('posting…')}\n\t\t\t\t\t\t{:else if !canAfford}\n\t\t\t\t\t\t\t{t('not enough chips')}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{t('post bet · lock')} <span class=\"bet-coin-sm dark\"></span>{stake} →\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</button>\n\t\t\t\t</form>\n\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</main>\n\n<style>\n\t.bet-coin-sm {\n\t\tdisplay: inline-block;\n\t\twidth: 13px;\n\t\theight: 13px;\n\t\tborder-radius: 50%;\n\t\tvertical-align: -2px;\n\t\tbackground: radial-gradient(circle at 34% 30%, #ffe27a, #f4b71f 70%);\n\t\tbox-shadow:\n\t\t\tinset 0 0 0 2px rgba(0, 0, 0, 0.28),\n\t\t\tinset 0 0 0 2.5px rgba(255, 255, 255, 0.16);\n\t}\n\t.bet-coin-sm.dark {\n\t\tbox-shadow:\n\t\t\tinset 0 0 0 2px rgba(0, 0, 0, 0.4),\n\t\t\tinset 0 0 0 2.5px rgba(255, 255, 255, 0.2);\n\t}\n\t.submit-btn {\n\t\ttransition:\n\t\t\ttransform 0.4s var(--ease-out-expo),\n\t\t\tbox-shadow 0.4s var(--ease-out-expo);\n\t}\n\t.submit-btn:not(:disabled):hover {\n\t\ttransform: translateY(-2px);\n\t\tbox-shadow: 0 12px 32px -10px rgb(255 229 0 / 0.4);\n\t}\n</style>\n"],"version":3}