From 4895d2ef2e2196792684e2d1f0826dbc74a0366f Mon Sep 17 00:00:00 2001 From: Grayson Adams <51373669+GraysonCAdams@users.noreply.github.com> Date: Sun, 1 Mar 2026 09:27:53 -0600 Subject: [PATCH 1/7] feat: overhaul GIF picker with masonry layout, lazy-loading, and share URLs - Replace CSS grid with dynamic masonry columns (2-3 based on width) - Add IntersectionObserver to auto-play visible GIFs and show stills off-screen - Use WEBP for grid previews (smaller/faster), full GIF for comment sharing - Add search icon to search field for better visual affordance - Increase GIF fetch limit from 20 to 30 - Reduce displayed GIF sizes in comments for better readability --- src/lib/components/CommentInput.svelte | 7 +- src/lib/components/CommentsSheet.svelte | 13 +- src/lib/components/GifPicker.svelte | 154 ++++++++++++++++++------ src/routes/api/gifs/search/+server.ts | 8 +- 4 files changed, 132 insertions(+), 50 deletions(-) diff --git a/src/lib/components/CommentInput.svelte b/src/lib/components/CommentInput.svelte index 2d3c095..7727a46 100644 --- a/src/lib/components/CommentInput.svelte +++ b/src/lib/components/CommentInput.svelte @@ -17,7 +17,7 @@ replyingTo: { id: string; username: string } | null; submitting: boolean; gifEnabled?: boolean; - attachedGif: { url: string; stillUrl: string } | null; + attachedGif: { url: string; stillUrl: string; shareUrl?: string } | null; members?: GroupMember[]; onsubmit: (text: string, gifUrl?: string) => void; oncancelreply: () => void; @@ -42,7 +42,7 @@ function handleSubmit(e: SubmitEvent) { e.preventDefault(); if (!canSubmit || submitting) return; - onsubmit(text.trim(), attachedGif?.url); + onsubmit(text.trim(), attachedGif?.shareUrl || attachedGif?.url); } @@ -83,7 +83,8 @@ text = t; }} onsubmit={() => { - if (canSubmit && !submitting) onsubmit(text.trim(), attachedGif?.url); + if (canSubmit && !submitting) + onsubmit(text.trim(), attachedGif?.shareUrl || attachedGif?.url); }} /> diff --git a/src/lib/components/CommentsSheet.svelte b/src/lib/components/CommentsSheet.svelte index 706a686..7c39a4d 100644 --- a/src/lib/components/CommentsSheet.svelte +++ b/src/lib/components/CommentsSheet.svelte @@ -45,6 +45,7 @@ id: string; url: string; stillUrl: string; + shareUrl: string; width: number; height: number; } | null>(null); @@ -373,16 +374,18 @@ .comment-gif, .reply-gif { display: block; - border-radius: var(--radius-sm); - margin-top: var(--space-xs); + border-radius: var(--radius-md); + margin-top: var(--space-sm); object-fit: contain; + background: var(--bg-surface); + padding: 2px; } .comment-gif { - max-width: 200px; - max-height: 160px; + max-width: 150px; + max-height: 150px; } .reply-gif { - max-width: 160px; + max-width: 120px; max-height: 120px; } .comment-actions { diff --git a/src/lib/components/GifPicker.svelte b/src/lib/components/GifPicker.svelte index eb5dc27..e44d89a 100644 --- a/src/lib/components/GifPicker.svelte +++ b/src/lib/components/GifPicker.svelte @@ -1,9 +1,12 @@ - -