{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4d21-7371-93e5-0175c7f7cf4b","file":"96.BaFY3546.mjs","mappings":"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","names":["fb","isAuth","$.derived","$$props","voted","$.state","voteCount","$.user_effect","$.get","comments","$.proxy","commentText","posting","postError","onMount","res","d","toggleVote","goto","wasVoted","$.set","body","submitComment","trimmed","statusLabel","s","timeAgo","iso","ms","days","hrs","mins","main","root","$.head","$$anchor","meta","root_1","$.template_effect","$0","$.set_attribute","div","div_1","button","$.child","span","$.sibling","$.reset","div_2","h1","div_3","span_1","span_2","span_3","span_4","root_2","$.set_text","text_6","span_5","root_3","$$render","consequent","alternate","span_6","root_4","consequent_1","p","root_5","text_7","consequent_2","section","h2","span_7","p_1","root_6","ul","root_7","c","li","root_8","div_4","a_1","root_9","text_9","span_8","root_10","consequent_4","alternate_1","span_9","node_4","p_2","text_11","consequent_3","alternate_2","div_5","node_3","p_3","root_11","a_2","textarea","$.first_child","fragment","$.remove_textarea_child","node_6","p_4","root_13","consequent_6","div_6","span_10","button_1","text_14","text_13","$$value","$.delegated","alternate_3","consequent_5","$.set_class","text_1","text_3","text_4","text_8"],"sources":["../../../../../../src/routes/feedback/item/[id]/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { goto } from '$app/navigation';\n\timport { onMount } from 'svelte';\n\timport type { FeedbackDetail, FeedbackCommentDTO } from '$lib/server/feedback-board';\n\n\tlet { data } = $props();\n\tconst fb = $derived(data.feedback as FeedbackDetail);\n\tconst isAuth = $derived(!!data.session?.user);\n\n\tlet voted = $state(false);\n\tlet voteCount = $state(0);\n\t$effect(() => { voteCount = fb.voteCount; });\n\n\tlet comments = $state<FeedbackCommentDTO[]>(data.comments as FeedbackCommentDTO[]);\n\tlet commentText = $state('');\n\tlet posting = $state(false);\n\tlet postError = $state('');\n\n\tonMount(async () => {\n\t\tif (!isAuth) return;\n\t\ttry {\n\t\t\tconst res = await fetch('/api/feedback/my-votes');\n\t\t\tif (res.ok) {\n\t\t\t\tconst d = (await res.json()) as { ids: string[] };\n\t\t\t\tvoted = d.ids.includes(fb.id);\n\t\t\t}\n\t\t} catch { /* no-op */ }\n\t});\n\n\tasync function toggleVote() {\n\t\tif (!isAuth) {\n\t\t\tgoto(`/auth/sign-in?next=/feedback/item/${fb.id}`);\n\t\t\treturn;\n\t\t}\n\t\tconst wasVoted = voted;\n\t\tvoted = !wasVoted;\n\t\tvoteCount += wasVoted ? -1 : 1;\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/feedback/${fb.id}/vote`, { method: 'POST' });\n\t\t\tif (!res.ok) throw new Error('vote failed');\n\t\t\tconst body = (await res.json()) as { voted: boolean; voteCount: number };\n\t\t\tvoted = body.voted;\n\t\t\tvoteCount = body.voteCount;\n\t\t} catch {\n\t\t\tvoted = wasVoted;\n\t\t\tvoteCount = fb.voteCount;\n\t\t}\n\t}\n\n\tasync function submitComment() {\n\t\tconst trimmed = commentText.trim();\n\t\tif (trimmed.length === 0) return;\n\t\tif (!isAuth) {\n\t\t\tgoto(`/auth/sign-in?next=/feedback/item/${fb.id}`);\n\t\t\treturn;\n\t\t}\n\t\tposting = true; postError = '';\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/feedback/${fb.id}/comment`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ body: trimmed })\n\t\t\t});\n\t\t\tconst d = await res.json();\n\t\t\tif (!res.ok) {\n\t\t\t\tpostError = d.error || 'comment failed';\n\t\t\t} else {\n\t\t\t\tcomments = [...comments, d.comment];\n\t\t\t\tcommentText = '';\n\t\t\t}\n\t\t} catch {\n\t\t\tpostError = 'network error';\n\t\t}\n\t\tposting = false;\n\t}\n\n\tfunction statusLabel(s: string) {\n\t\treturn s === 'in_progress' ? 'in progress' : s;\n\t}\n\tfunction timeAgo(iso: string) {\n\t\tconst ms = Date.now() - new Date(iso).getTime();\n\t\tconst days = Math.floor(ms / 86400000);\n\t\tif (days >= 1) return `${days}d ago`;\n\t\tconst hrs = Math.floor(ms / 3600000);\n\t\tif (hrs >= 1) return `${hrs}h ago`;\n\t\tconst mins = Math.floor(ms / 60000);\n\t\tif (mins >= 1) return `${mins}m ago`;\n\t\treturn 'just now';\n\t}\n</script>\n\n<svelte:head>\n\t<title>{fb.title} — feedback — ratemyd.</title>\n\t<meta name=\"description\" content={fb.body?.slice(0, 160) ?? fb.title} />\n</svelte:head>\n\n<main class=\"min-h-screen bg-bg pt-28 pb-32\">\n\t<div class=\"mx-auto max-w-3xl px-5\">\n\t\t<a href=\"/feedback\" class=\"text-[11px] uppercase tracking-wider text-muted no-underline hover:text-text\">← back to roadmap</a>\n\n\t\t<!-- card -->\n\t\t<div class=\"mt-4 flex items-start gap-4 rounded-2xl border border-border bg-surface p-5\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonclick={toggleVote}\n\t\t\t\tclass=\"flex shrink-0 flex-col items-center gap-1 rounded-lg border px-4 py-3 transition-all min-w-[56px]\n\t\t\t\t\t{voted ? 'border-coral bg-coral/10 text-coral' : 'border-border text-muted hover:border-muted'}\"\n\t\t\t\taria-label={voted ? 'remove vote' : 'add vote'}\n\t\t\t>\n\t\t\t\t<span class=\"text-[12px] leading-none\">▲</span>\n\t\t\t\t<span class=\"font-display text-[16px] font-bold leading-none\">{voteCount}</span>\n\t\t\t</button>\n\n\t\t\t<div class=\"flex-1 min-w-0\">\n\t\t\t\t<h1 class=\"font-display text-[clamp(1.4rem,3vw,2rem)] font-bold leading-tight text-text\">{fb.title}</h1>\n\t\t\t\t<div class=\"mt-3 flex flex-wrap items-center gap-2 text-[10px]\">\n\t\t\t\t\t<span class=\"rounded-full px-2 py-0.5 font-display font-semibold uppercase tracking-wider\n\t\t\t\t\t\t{fb.status === 'planned' ? 'bg-blue/15 text-blue border border-blue/30'\n\t\t\t\t\t\t: fb.status === 'in_progress' ? 'bg-yellow/12 text-yellow border border-yellow/30'\n\t\t\t\t\t\t: fb.status === 'shipped' ? 'bg-green/12 text-green border border-green/30'\n\t\t\t\t\t\t: fb.status === 'wontfix' ? 'bg-coral/10 text-coral/70 border border-coral/20'\n\t\t\t\t\t\t: fb.status === 'duplicate' ? 'bg-muted/15 text-muted border border-border'\n\t\t\t\t\t\t: 'bg-surface-2 text-muted border border-border'}\">\n\t\t\t\t\t\t{statusLabel(fb.status)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"rounded-full border border-border bg-bg px-2 py-0.5 font-display font-semibold uppercase tracking-wider text-muted\">{fb.type}</span>\n\t\t\t\t\t<span class=\"rounded-full border border-border bg-bg px-2 py-0.5 font-display font-semibold uppercase tracking-wider text-muted/70\">{fb.category}</span>\n\t\t\t\t\t<span class=\"text-muted/60\">{timeAgo(fb.createdAt)}</span>\n\t\t\t\t\t{#if fb.authorNickname}\n\t\t\t\t\t\t<a href=\"/u/{encodeURIComponent(fb.authorNickname)}\" class=\"text-muted/60 no-underline hover:text-text\">· by {fb.authorNickname}</a>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<span class=\"text-muted/60\">· anon</span>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if fb.rewardedAt}\n\t\t\t\t\t\t<span class=\"rounded-full border border-yellow/30 bg-yellow/10 px-2 py-0.5 font-display font-semibold uppercase tracking-wider text-yellow\">+10 rewarded</span>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\n\t\t\t\t{#if fb.body}\n\t\t\t\t\t<p class=\"mt-4 whitespace-pre-wrap text-sm leading-relaxed text-muted\">{fb.body}</p>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- comments -->\n\t\t<section class=\"mt-10\">\n\t\t\t<h2 class=\"font-display text-[14px] font-bold uppercase tracking-[0.2em] text-muted\">discussion <span class=\"text-text\">{comments.length}</span></h2>\n\n\t\t\t{#if comments.length === 0}\n\t\t\t\t<p class=\"mt-4 text-sm text-muted/60\">no comments yet — be the first.</p>\n\t\t\t{:else}\n\t\t\t\t<ul class=\"mt-4 flex flex-col gap-3\">\n\t\t\t\t\t{#each comments as c (c.id)}\n\t\t\t\t\t\t<li class=\"rounded-xl border border-border bg-surface px-4 py-3\">\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2 text-[11px] text-muted\">\n\t\t\t\t\t\t\t\t{#if c.authorNickname}\n\t\t\t\t\t\t\t\t\t<a href=\"/u/{encodeURIComponent(c.authorNickname)}\" class=\"font-semibold text-text no-underline hover:underline\">{c.authorNickname}</a>\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<span class=\"font-semibold text-text\">anon</span>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t<span class=\"text-muted/50\">{timeAgo(c.createdAt)}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p class=\"mt-2 whitespace-pre-wrap text-sm leading-relaxed text-text/90\">{c.body}</p>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t{/each}\n\t\t\t\t</ul>\n\t\t\t{/if}\n\n\t\t\t<!-- compose -->\n\t\t\t<div class=\"mt-6 rounded-xl border border-border bg-surface p-4\">\n\t\t\t\t{#if !isAuth}\n\t\t\t\t\t<p class=\"text-sm text-muted\">\n\t\t\t\t\t\t<a href=\"/auth/sign-in?next=/feedback/item/{fb.id}\" class=\"text-coral no-underline hover:underline\">sign in</a> to join the discussion.\n\t\t\t\t\t</p>\n\t\t\t\t{:else}\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tbind:value={commentText}\n\t\t\t\t\t\trows=\"3\"\n\t\t\t\t\t\tmaxlength=\"1000\"\n\t\t\t\t\t\tplaceholder=\"add to the discussion…\"\n\t\t\t\t\t\tclass=\"w-full resize-none rounded-lg border border-border bg-bg px-3 py-2 text-sm text-text placeholder:text-muted/40 focus:border-coral/40 focus:outline-none\"\n\t\t\t\t\t\tdisabled={posting}\n\t\t\t\t\t></textarea>\n\t\t\t\t\t{#if postError}\n\t\t\t\t\t\t<p class=\"mt-2 text-[11px] text-coral\">{postError}</p>\n\t\t\t\t\t{/if}\n\t\t\t\t\t<div class=\"mt-3 flex items-center justify-between\">\n\t\t\t\t\t\t<span class=\"text-[10px] text-muted/50\">{commentText.length}/1000</span>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonclick={submitComment}\n\t\t\t\t\t\t\tdisabled={posting || commentText.trim().length === 0}\n\t\t\t\t\t\t\tclass=\"cursor-pointer rounded-lg bg-coral px-4 py-2 font-display text-[12px] font-semibold text-white disabled:opacity-40\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{posting ? 'posting…' : 'post →'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</section>\n\t</div>\n</main>\n"],"version":3}