{authorBlocked ? 'Blocked' : 'Muted'} {label('post')} from {displayName} (@{post.author.handle}) setForceShowHidden(true)} type="button" > Show
{!inThread && ( e.preventDefault()} /> )} {reason?.$type === 'app.bsky.feed.defs#reasonRepost' && ( {(reason as { by: { handle: string } }).by.handle} {label('repost')}ed )} {item.reply && (() => { const root = item.reply.root; if (!('author' in root)) return null; const rootAuthor = root.author; const rootText = 'record' in root && root.record?.text ? root.record.text : ''; const rootUri = root.uri; const rootAuthorDid = rootAuthor.did; const replyRoute = buildPostPath(rootUri, rootAuthor.handle, rootAuthorDid); return ( { e.preventDefault(); e.stopPropagation(); switch (viewMode) { case 'page': navigate(replyRoute); break; case 'modal': case 'side': navigate(replyRoute); openPost(rootUri, viewMode); break; } }} > {rootAuthor.avatar ? ( ) : ( {((rootAuthor.displayName ?? rootAuthor.handle) || '?').charAt(0).toUpperCase()} )} {label('reply', false, true)} to{' '} {rootAuthor.displayName ?? rootAuthor.handle} {isBlocked(rootAuthorDid) && Blocked} {isMuted(rootAuthorDid) && Muted} {rootAuthor.suspended && Suspended} {rootText && ( {' '}ยท {rootText.length > 80 ? rootText.slice(0, 80) + '\u2026' : rootText} )} ); })()} { e.stopPropagation(); openProfileByMode(post.author.handle); }} onAuxClick={handleProfileAuxClick} type="button" > {post.author.avatar ? ( ) : ( {initial} )} { e.stopPropagation(); openProfileByMode(post.author.handle); }} onAuxClick={handleProfileAuxClick} type="button" > {displayName} {pronouns && {pronouns}} {post.author.viewer?.followedBy && Follows you} {isBlockedBy(post.author.did) && Blocks you} {isBlocked(post.author.did) && Blocked} {isMuted(post.author.did) && Muted} {post.author.suspended && Suspended} {session && session.did !== post.author.did && ( )} {relativeTime(post.indexedAt)} { const route = buildPostPath(embedUri, embedHandle, embedDid); switch (viewMode) { case 'page': navigate(route); break; case 'modal': case 'side': navigate(route); openPost(embedUri, viewMode); break; } }} /> { e.stopPropagation(); setShowReply(true); }}> {replyCount} { e.stopPropagation(); setShowRepostMenu(!showRepostMenu); }} disabled={reposting} title={repostUri ? `Undo ${label('repost')}` : label('repost', false, true)} > {repostCount} {showRepostMenu && ( e.stopPropagation()}> { setShowRepostMenu(false); await handleRepost(); }} disabled={reposting} > {repostUri ? `Undo ${label('repost', false, true)}` : label('repost', false, true)} { setShowRepostMenu(false); setShowQuote(true); }} > Quote {label('post', false, true)} )} { e.stopPropagation(); handleLike(); }} disabled={liking} title={likeUri ? `Un${label('like')}` : label('like', false, true)} > {likeCount} { e.stopPropagation(); handleBookmark(); }} disabled={bookmarking} title={bookmarked ? `Remove ${label('bookmark')}` : label('bookmark', false, true)} > {(() => { const rkey = extractRkey(post.uri); if (!rkey) return null; return ( ); })()} {session && session.did === post.author.did && ( { e.stopPropagation(); setShowEdit(true); }} title={`Edit ${label('post')}`} > )} { e.stopPropagation(); setShowMoreMenu(!showMoreMenu); }} title="More" > {showMoreMenu && ( e.stopPropagation()}> { setShowMoreMenu(false); handleMuteThread(); }} disabled={mutingThread} > {threadMuted ? 'Unmute thread' : 'Mute thread'} { setShowMoreMenu(false); setShowReport(true); }} > Report {label('post', false, true)} )} {showReply && ( setShowReply(false)} onPosted={onAction ?? (() => {})} /> )} {showQuote && ( setShowQuote(false)} onPosted={onAction ?? (() => {})} /> )} {showEdit && ( setShowEdit(false)} onPosted={onAction ?? (() => {})} /> )} {showReport && ( setShowReport(false)} /> )}