grain.social is a photo sharing platform built on atproto. grain.social
atproto photography appview
57
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: resolve all svelte-check warnings

- Add standard line-clamp property in NotificationItem
- Fix a11y click handler warnings in StoryViewer
- Remove unused .comment-author CSS selector in StoryViewer
- Replace deprecated svelte:component with dynamic component in SidebarRight

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+6 -7
+1
app/lib/components/atoms/NotificationItem.svelte
··· 238 238 text-overflow: ellipsis; 239 239 display: -webkit-box; 240 240 -webkit-line-clamp: 3; 241 + line-clamp: 3; 241 242 -webkit-box-orient: vertical; 242 243 } 243 244 .notif-quote {
+2 -1
app/lib/components/organisms/SidebarRight.svelte
··· 165 165 <div class="sidebar-card-header">Feeds</div> 166 166 {#each $pinnedFeeds as feed, i (feed.id)} 167 167 {@const href = i === 0 ? '/' : feed.path} 168 + {@const FeedIcon = feedIcon(feed)} 168 169 <a 169 170 {href} 170 171 class="sidebar-link" ··· 172 173 ? page.url.pathname === '/' 173 174 : page.url.pathname + page.url.search === feed.path || page.url.pathname === feed.path} 174 175 > 175 - <span class="sidebar-link-icon"><svelte:component this={feedIcon(feed)} size={16} /></span> 176 + <span class="sidebar-link-icon"><FeedIcon size={16} /></span> 176 177 <span class="sidebar-link-label">{feed.type === 'hashtag' ? feed.label.replace(/^#/, '') : feed.label}</span> 177 178 </a> 178 179 {/each}
+3 -6
app/lib/components/organisms/StoryViewer.svelte
··· 407 407 408 408 <!-- Bottom input bar --> 409 409 {#if !isExpired} 410 - <div class="story-bottom-bar" onclick={(e) => e.stopPropagation()}> 410 + <!-- svelte-ignore a11y_no_static_element_interactions --> 411 + <div class="story-bottom-bar" role="presentation" onclick={(e) => e.stopPropagation()}> 411 412 {#if latestComment} 412 413 <div class="latest-comment"> 413 414 {#if latestComment.author?.avatar} ··· 435 436 436 437 {#if commentSheetOpen && currentStory} 437 438 <div class="contained-sheet-wrapper" onclick={(e) => e.stopPropagation()} role="presentation"> 438 - <div class="contained-sheet-backdrop" onclick={() => { commentSheetOpen = false; paused = false; startTimer() }} role="button" tabindex="-1"></div> 439 + <div class="contained-sheet-backdrop" onclick={() => { commentSheetOpen = false; paused = false; startTimer() }} onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { commentSheetOpen = false; paused = false; startTimer() }}} role="button" tabindex="-1"></div> 439 440 <CommentSheet 440 441 open={commentSheetOpen} 441 442 subjectUri={currentStory.uri} ··· 695 696 height: 24px; 696 697 border-radius: 50%; 697 698 object-fit: cover; 698 - flex-shrink: 0; 699 - } 700 - .comment-author { 701 - font-weight: 600; 702 699 flex-shrink: 0; 703 700 } 704 701 .input-row {