···
replyParent={record.replyParent}
hasDivider={idx < records.length - 1}
···
reason?: AuthorFeedReason;
replyParent?: ReplyParentInfo;
···
···
const absolute = record.createdAt
? new Date(record.createdAt).toLocaleString()
227
-
const href = `${blueskyAppBaseUrl}/profile/${did}/post/${rkey}`;
231
+
// Parse the URI to get the actual post's DID and rkey
232
+
// This handles reposts correctly by linking to the original post
233
+
const parsedUri = uri ? parseAtUri(uri) : undefined;
234
+
const postDid = parsedUri?.did ?? did;
235
+
const postRkey = parsedUri?.rkey ?? rkey;
236
+
const href = `${blueskyAppBaseUrl}/profile/${postDid}/post/${postRkey}`;
238
+
// Resolve the original post author's handle for reposts
239
+
const { handle: originalAuthorHandle } = useDidResolution(
240
+
reason?.$type === "app.bsky.feed.defs#reasonRepost" ? postDid : undefined,
reason?.$type === "app.bsky.feed.defs#reasonRepost"
230
-
? `${formatActor(reason.by) ?? "Someone"} reposted`
245
+
? `${formatActor(reason.by) ?? "Someone"} reposted @${originalAuthorHandle ?? formatDid(postDid)}`
const parentUri = replyParent?.uri ?? record.reply?.parent?.uri;
···
const { handle: resolvedReplyHandle } = useDidResolution(
replyParent?.author?.handle ? undefined : parentDid,
239
-
const replyLabel = formatReplyTarget(
254
+
const replyTarget = formatReplyTarget(
260
+
const isReply = !!replyTarget;
const postPreview = text.slice(0, 100);
? `Post by ${did}: ${postPreview}${text.length > 100 ? '...' : ''}`
254
-
rel="noopener noreferrer"
255
-
aria-label={ariaLabel}
258
-
color: `var(--atproto-color-text)`,
270
+
...listStyles.rowContainer,
? `1px solid var(--atproto-color-border)`
274
+
borderLeft: isReply
275
+
? `3px solid #1185FE`
276
+
: "3px solid transparent",
265
-
<span style={{ ...listStyles.rowMeta, color: `var(--atproto-color-text-secondary)` }}>
280
+
<div style={{ ...listStyles.rowMeta, color: `var(--atproto-color-text-secondary)` }}>
270
-
<span style={{ ...listStyles.rowMeta, color: `var(--atproto-color-text-secondary)` }}>
285
+
<div style={listStyles.replyHeader}>
286
+
<span style={{ ...listStyles.replyArrow, color: `#1185FE` }}>
289
+
<span style={{ ...listStyles.replyText, color: `var(--atproto-color-text-secondary)` }}>
290
+
replying to {replyTarget}
294
+
style={{ ...listStyles.rowTime, color: `var(--atproto-color-text-secondary)`, marginLeft: "auto" }}
302
+
{!isReply && relative && (
style={{ ...listStyles.rowTime, color: `var(--atproto-color-text-secondary)` }}
···
283
-
<p style={{ ...listStyles.rowBody, color: `var(--atproto-color-text)` }}>
290
-
...listStyles.rowBody,
291
-
color: `var(--atproto-color-text)`,
292
-
fontStyle: "italic",
313
+
rel="noopener noreferrer"
314
+
aria-label={ariaLabel}
316
+
...listStyles.rowLink,
317
+
color: `var(--atproto-color-text)`,
321
+
<p style={{ ...listStyles.rowBody, color: `var(--atproto-color-text)` }}>
328
+
...listStyles.rowBody,
329
+
color: `var(--atproto-color-text)`,
330
+
fontStyle: "italic",
···
} satisfies React.CSSProperties,
393
-
textDecoration: "none",
transition: "background-color 120ms ease",
} satisfies React.CSSProperties,
438
+
textDecoration: "none",
440
+
} satisfies React.CSSProperties,
443
+
alignItems: "center",
447
+
} satisfies React.CSSProperties,
451
+
} satisfies React.CSSProperties,
455
+
} satisfies React.CSSProperties,
···
const directHandle = feedParent?.author?.handle;
const handle = directHandle ?? resolvedHandle;
499
-
return `Replying to @${handle}`;
556
+
return `@${handle}`;
const parentDid = feedParent?.author?.did;
const targetUri = feedParent?.uri ?? parentUri;
···
const parsed = parseAtUri(targetUri);
const did = parentDid ?? parsed?.did;
if (!did) return undefined;
507
-
return `Replying to @${formatDid(did)}`;
564
+
return `@${formatDid(did)}`;