From c9447c8c6a523766bc17a76d14ddc029fa324e14 Mon Sep 17 00:00:00 2001 From: Arjun Mahanti Date: Mon, 14 Sep 2026 11:06:16 -0400 Subject: [PATCH 1/5] Restyle channel and thread messages as grouped bubbles Signed-off-by: Arjun Mahanti --- docs/images/message-bubbles-dark.png | Bin 0 -> 45997 bytes docs/images/message-bubbles-light.png | Bin 0 -> 46603 bytes docs/images/message-bubbles-thread.png | Bin 0 -> 34757 bytes src/bundled/channels/ChannelsPage.tsx | 1 + src/features/messages/ChannelTimeline.tsx | 15 +- src/features/messages/MessageRow.test.tsx | 38 ++- src/features/messages/MessageRow.tsx | 171 ++++++++----- src/features/messages/Messages.module.css | 232 ++++++++++++++---- src/features/messages/ThreadPanel.tsx | 17 +- src/features/messages/geometry.test.ts | 3 + src/features/messages/geometry.ts | 2 + .../messages/message-grouping.test.ts | 39 +++ src/features/messages/message-grouping.ts | 32 +++ tests/fixtures/message-bubbles.html | 12 + tests/fixtures/message-bubbles.module.css | 61 +++++ tests/fixtures/message-bubbles.tsx | 195 +++++++++++++++ tests/fixtures/messages.tsx | 1 + 17 files changed, 699 insertions(+), 120 deletions(-) create mode 100644 docs/images/message-bubbles-dark.png create mode 100644 docs/images/message-bubbles-light.png create mode 100644 docs/images/message-bubbles-thread.png create mode 100644 src/features/messages/message-grouping.test.ts create mode 100644 src/features/messages/message-grouping.ts create mode 100644 tests/fixtures/message-bubbles.html create mode 100644 tests/fixtures/message-bubbles.module.css create mode 100644 tests/fixtures/message-bubbles.tsx diff --git a/docs/images/message-bubbles-dark.png b/docs/images/message-bubbles-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8a96bcb3fc9bf88ac96fa46aed9cb0b115ec485b GIT binary patch literal 45997 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 literal 0 HcmV?d00001 diff --git a/docs/images/message-bubbles-light.png b/docs/images/message-bubbles-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4d46fd4907a141810b61fee2b94a68c2f4a3e8ed GIT binary patch literal 46603 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 literal 0 HcmV?d00001 diff --git a/docs/images/message-bubbles-thread.png b/docs/images/message-bubbles-thread.png new file mode 100644 index 0000000000000000000000000000000000000000..90e5cfc138b7bcf9096c92705d0df46fc7c9878e GIT binary patch literal 34757 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 pLWQhG$Kij=fEk;_H46$8v0e6+M% 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 E10JhX00000 literal 0 HcmV?d00001 diff --git a/src/bundled/channels/ChannelsPage.tsx b/src/bundled/channels/ChannelsPage.tsx index 19e67daf..39fd1182 100644 --- a/src/bundled/channels/ChannelsPage.tsx +++ b/src/bundled/channels/ChannelsPage.tsx @@ -603,6 +603,7 @@ function ChannelWorkspace({ extensions={extensions} key={`${showingThread.channelId}:${showingThread.messageId}`} session={queries} + viewer={viewer} scope={scope} channelName={current?.name ?? ""} channelId={showingThread.channelId} diff --git a/src/features/messages/ChannelTimeline.tsx b/src/features/messages/ChannelTimeline.tsx index 9db2483c..43aef3a8 100644 --- a/src/features/messages/ChannelTimeline.tsx +++ b/src/features/messages/ChannelTimeline.tsx @@ -6,6 +6,7 @@ import type { RelaySession } from "../relay/session"; import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react"; import { Virtualizer, type VirtualizerHandle } from "virtua"; import { MessageRow } from "./MessageRow"; +import { continuesMessage, startsMessageDay } from "./message-grouping"; import type { ChannelWindow } from "../relay/contracts"; import { useRowProfiles } from "../relay/react"; import { geometryFor, geometrySignature } from "./geometry"; @@ -109,8 +110,8 @@ function Timeline({ const profiles = useRowProfiles(queries.profiles, window.rows); const geometry = useMemo(() => geometryFor(queries.channels), [queries]); const signature = useMemo( - () => geometrySignature(window.rows, profiles), - [window.rows, profiles], + () => geometrySignature(window.rows, profiles, viewer), + [window.rows, profiles, viewer], ); const [focusedMessageId, setFocusedMessageId] = useState(); const focusedIndex = rows.findIndex((row) => row.id === focusedMessageId); @@ -468,12 +469,7 @@ function Timeline({ {...(initialCache.current ? { cache: initialCache.current } : {})} > {rows.map((row, index) => { - const day = - index === 0 || - new Date( - (rows[index - 1]?.createdAt ?? 0) * 1000, - ).toDateString() !== - new Date(row.createdAt * 1000).toDateString(); + const day = startsMessageDay(rows[index - 1], row); return row.membership ? ( { + const author = "a".repeat(64); + const sample = (viewer: string, groupEnd: boolean) => + renderToStaticMarkup( + undefined} + onOpenLink={() => true} + canOpenLink={() => true} + onOpenThread={() => {}} + day={false} + retry={undefined} + />, + ); + const incoming = sample("other", true); + expect(incoming).toContain('data-bubble-direction="incoming"'); + expect(incoming).toContain("Important"); + expect(incoming).toContain('aria-label="View Author profile"'); + expect(incoming).toContain('aria-label="Reply in thread"'); + expect(sample("other", false)).not.toContain( + 'aria-label="View Author profile"', + ); + const outgoing = sample(author, true); + expect(outgoing).toContain('data-bubble-direction="outgoing"'); + expect(outgoing).not.toContain('aria-label="View Author profile"'); +}); function render( patch: Partial, replies = 23, @@ -64,7 +100,7 @@ it.each([null, 0])( (observedCount) => { const { html } = render({ observedCount }); expect(html).toContain('aria-label="View thread: 23 replies"'); - expect(html).not.toContain("title="); + expect(html).not.toContain('title="Observed unread replies'); }, ); it("describes local manual intent and stale evidence honestly", () => { diff --git a/src/features/messages/MessageRow.tsx b/src/features/messages/MessageRow.tsx index 9cc74e38..33925a81 100644 --- a/src/features/messages/MessageRow.tsx +++ b/src/features/messages/MessageRow.tsx @@ -1,3 +1,4 @@ +import { CornerUpLeft } from "lucide-react"; import { memo, useCallback, useSyncExternalStore } from "react"; import type { UnreadCapability } from "../relay/unread"; import { profileTarget } from "../profiles/target"; @@ -13,6 +14,9 @@ import { usesLargeEmojiPresentation } from "./emoji-size"; export type MessageRowProps = { row: ChannelMessage; + viewer?: string | undefined; + continuation?: boolean; + groupEnd?: boolean; unread?: UnreadCapability | undefined; extensions?: ConversationExtensions | undefined; profile: Profile | undefined; @@ -27,6 +31,9 @@ export type MessageRowProps = { export const MessageRow = memo(function MessageRow({ row, + viewer, + continuation = false, + groupEnd = true, unread, extensions, profile, @@ -38,6 +45,9 @@ export const MessageRow = memo(function MessageRow({ onOpenThread, participantProfiles, }: MessageRowProps) { + const outgoing = !!viewer && row.authorId === viewer; + const canOpenThread = + onOpenThread && (!row.delivery || row.delivery === "seen"); const threadUnread = useThreadUnread( row.replyCount > 0 && onOpenThread ? unread : undefined, row.channelId, @@ -70,70 +80,26 @@ export const MessageRow = memo(function MessageRow({ )} -
- ) => { - event.currentTarget.focus(); - onOpenLink(target); - }, - } - : {})} - > - {picture ? ( - - ) : ( - name.slice(0, 2).toUpperCase() - )} - +
+ {!outgoing &&
}
-
- {name} - - {attachment.video ? "Video attachment" : "Image attachment"} ↗ - - ) : ( - - ); - })} {row.reactions.length > 0 && (
{row.reactions.map((reaction) => ( @@ -155,6 +121,97 @@ export const MessageRow = memo(function MessageRow({ ))}
)} +
+ {row.content && ( + + )} + {row.attachments.length > 0 && ( +
+ {row.attachments.map((attachment) => { + const url = safeMessageUrl(attachment.url); + if (!url) return null; + const source = media(url); + return attachment.video || !source ? ( + + {attachment.video + ? "Video attachment" + : "Image attachment"}{" "} + ↗ + + ) : ( + + ); + })} +
+ )} + {!outgoing && groupEnd && ( + , + ) => { + event.currentTarget.focus(); + onOpenLink(target); + }, + } + : {})} + > + {name.slice(0, 2).toUpperCase()} + {picture && ( + { + event.currentTarget.hidden = true; + }} + /> + )} + + )} + {canOpenThread && ( +
+ +
+ )} +
+ {row.replyCount > 0 && onOpenThread && ( + + + + +
+ # design + {messages.map((row, index) => ( + undefined} + onOpenLink={() => { + setStatus("Opened reference link"); + return true; + }} + onOpenThread={(id) => setStatus(`Opened thread for ${id}`)} + retry={() => setStatus("Retry requested")} + /> + ))} +
+ {humanTyping && } + {agentTyping && } +
+
+

+ {status} +

+ + ); +} +const root = document.getElementById("root"); +if (!root) throw new Error("Missing preview root"); +createRoot(root).render(); diff --git a/tests/fixtures/messages.tsx b/tests/fixtures/messages.tsx index a102fe2e..d01198e1 100644 --- a/tests/fixtures/messages.tsx +++ b/tests/fixtures/messages.tsx @@ -279,6 +279,7 @@ function Fixture() { channelName={channelId} /> Date: Mon, 14 Sep 2026 12:56:35 -0400 Subject: [PATCH 2/5] Use shared design system for message bubbles and actions Signed-off-by: Arjun Mahanti --- docs/images/message-bubbles-dark.png | Bin 45997 -> 43899 bytes docs/images/message-bubbles-light.png | Bin 46603 -> 45489 bytes docs/images/message-bubbles-thread.png | Bin 34757 -> 33218 bytes src/bundled/emoji/Emoji.module.css | 23 +- src/bundled/emoji/EmojiPicker.tsx | 69 ++--- src/features/conversation/ReactionTool.tsx | 9 +- src/features/messages/DeliveryNotice.tsx | 5 +- src/features/messages/MessageRow.tsx | 256 +++++++++--------- src/features/messages/Messages.module.css | 289 +++++++++------------ src/features/messages/ThreadPanel.test.tsx | 29 +-- src/features/messages/geometry.ts | 2 +- tests/browser/reactions.spec.mjs | 53 +++- tests/fixtures/emoji.tsx | 2 +- tests/fixtures/message-bubbles.module.css | 14 +- tests/fixtures/message-bubbles.tsx | 18 +- 15 files changed, 387 insertions(+), 382 deletions(-) diff --git a/docs/images/message-bubbles-dark.png b/docs/images/message-bubbles-dark.png index 8a96bcb3fc9bf88ac96fa46aed9cb0b115ec485b..8d795c2e2c4cd43b5d70d467eb6b790b7c77f31f 100644 GIT binary patch literal 43899 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 diff --git a/docs/images/message-bubbles-light.png b/docs/images/message-bubbles-light.png index 4d46fd4907a141810b61fee2b94a68c2f4a3e8ed..020f0355584c8ff0c19b04166f72a5da6b4d3d0d 100644 GIT binary patch literal 45489 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 X!+MEf@h`=R|JnEYU(H~#Uq=1{q&Xv^ literal 46603 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 diff --git a/docs/images/message-bubbles-thread.png b/docs/images/message-bubbles-thread.png index 90e5cfc138b7bcf9096c92705d0df46fc7c9878e..9b545ad3e0e1a776676fe76803c36c3110a0b9be 100644 GIT binary patch literal 33218 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 literal 34757 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 pLWQhG$Kij=fEk;_H46$8v0e6+M% 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 E10JhX00000 diff --git a/src/bundled/emoji/Emoji.module.css b/src/bundled/emoji/Emoji.module.css index 05a3fa1c..0f92bad5 100644 --- a/src/bundled/emoji/Emoji.module.css +++ b/src/bundled/emoji/Emoji.module.css @@ -52,31 +52,14 @@ z-index: 100; } .reactionPopover { + background: var(--bg-float); + border-color: var(--border-primary); + box-shadow: var(--shadow-sm); position: relative; bottom: auto; left: auto; max-width: calc(100vw - 32px); } -.reactionTrigger { - display: inline-flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - padding: 0; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--surface-control); - color: var(--text-muted); - cursor: pointer; -} -.reactionTrigger:hover { - color: var(--text); -} -.reactionTrigger:focus-visible { - outline: 2px solid var(--text); - outline-offset: 2px; -} .emojiPopover[data-has-tabs] .sharedSearchIcon { top: 67px; } diff --git a/src/bundled/emoji/EmojiPicker.tsx b/src/bundled/emoji/EmojiPicker.tsx index 1bad6814..a99fad67 100644 --- a/src/bundled/emoji/EmojiPicker.tsx +++ b/src/bundled/emoji/EmojiPicker.tsx @@ -6,7 +6,9 @@ import { useState, useSyncExternalStore, } from "react"; -import { Search, Smile, SmilePlus } from "lucide-react"; +import { Search, Smile } from "lucide-react"; +import { IconMoodPlus } from "@tabler/icons-react"; +import { IconButton } from "../../shared/design-system/ui/IconButton"; import { Popover } from "@base-ui/react/popover"; import type { RelaySession } from "../../features/relay/session"; import { @@ -301,38 +303,45 @@ export function EmojiPicker({ )} ); - const button = ( + const triggerProps = { + ref: trigger, + "aria-expanded": open && !disabled, + "aria-busy": (gifDiscoveryRequested && gifs === undefined) || undefined, + "aria-controls": id, + disabled, + onPointerEnter: () => setGifDiscoveryRequested(true), + onFocus: () => setGifDiscoveryRequested(true), + onClick: () => { + if (open) { + setOpen(false); + return; + } + setAnimateTab(false); + setPressedTab(undefined); + void session.emoji.ensure(); + if (gifs !== true && gifAvailability?.community === community) + setGifAvailability(undefined); + setGifDiscoveryRequested(true); + setOpen(true); + }, + }; + const button = reaction ? ( +
diff --git a/src/features/messages/Messages.module.css b/src/features/messages/Messages.module.css index 3dc1646c..a5ddd842 100644 --- a/src/features/messages/Messages.module.css +++ b/src/features/messages/Messages.module.css @@ -37,6 +37,7 @@ min-height: 0; overflow-y: auto; overflow-anchor: none; + background: var(--bg-panel); padding: 0 16px; scrollbar-width: thin; } @@ -66,56 +67,43 @@ display: flex; justify-content: center; padding: 7px 0; - color: var(--text-muted); - font-size: calc(12px * var(--buzz-text-scale, 1)); + color: var(--text-tertiary); margin: 18px 0 0; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); } .message { - --bubble-background: var(--surface-control); - --bubble-foreground: var(--text); + --bubble-background: var(--neutral-2); + --bubble-foreground: var(--text-primary); display: flex; gap: 10px; padding: 23px 8px 1px; } .message[data-bubble-direction="outgoing"] { - --bubble-background: var(--primary); - --bubble-foreground: var(--on-primary); + --bubble-background: var(--neutral-11); + --bubble-foreground: var(--neutral-1); justify-content: flex-end; } .message.continuation { padding-top: 1px; } .avatarSpace { - width: 28px; + width: 32px; flex-shrink: 0; } .avatar { position: absolute; - left: -38px; + left: -42px; bottom: 0; - width: 28px; - height: 28px; - border-radius: 50%; - background: var(--surface-accent); - color: var(--text-muted); - display: grid; - place-items: center; - font-size: calc(10px * var(--buzz-text-scale, 1)); - overflow: hidden; -} -.avatar img { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; } .messageBody { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; - max-width: min(82%, calc(100% - 38px)); + max-width: min(82%, calc(100% - 42px)); } .message[data-bubble-direction="outgoing"] .messageBody { align-items: flex-end; @@ -129,10 +117,12 @@ gap: 8px; padding: 0 4px; margin-bottom: 6px; - color: var(--text-muted); - font-size: calc(12px * var(--buzz-text-scale, 1)); - line-height: calc(16px * var(--buzz-text-scale, 1)); + color: var(--text-secondary); overflow-wrap: anywhere; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); } .byline strong { font-weight: 600; @@ -166,8 +156,10 @@ padding: 8px 14px; background: var(--bubble-background); color: var(--bubble-foreground); - font-size: calc(15px * var(--buzz-text-scale, 1)); - line-height: 1.5; + font-size: var(--text-body); + line-height: var(--text-body--line-height); + letter-spacing: var(--text-body--letter-spacing); + font-weight: var(--text-body--font-weight); white-space: normal; overflow-wrap: anywhere; } @@ -179,50 +171,29 @@ line-height: calc(42px * var(--buzz-text-scale, 1)); } .text a { - color: var(--link); + color: var(--blue-12); text-decoration: underline; text-underline-offset: 2px; } .reactions { --inline-emoji-size: 16px; - position: relative; - z-index: 1; display: flex; - flex-wrap: wrap; - align-items: center; - align-self: flex-end; - gap: 4px; max-width: 100%; - min-height: 28px; - margin: 0 -6px -8px 0; - color: var(--text); - font-size: calc(12px * var(--buzz-text-scale, 1)); -} -.message[data-bubble-direction="outgoing"] .reactions { - align-self: flex-start; - margin-right: 0; - margin-left: -6px; -} -.message:has(.bubbleActions) .reactions { - max-width: calc(100% - 36px); - margin-right: 36px; -} -.reactions:has([role="status"], [role="alert"]) { - margin-bottom: 4px; -} -.reactions > :where([role="status"], [role="alert"]) { - flex-basis: 100%; - overflow-wrap: anywhere; + margin: 4px 0 2px; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); } .reactionChips { display: flex; min-width: 0; max-width: 100%; overflow-x: auto; - border: 1.5px solid var(--surface); + border: 1px solid var(--border-primary); border-radius: 999px; - background: var(--bubble-background); - color: var(--bubble-foreground); + background: var(--neutral-2); + color: var(--text-primary); } .reactionChips > span { display: inline-flex; @@ -234,28 +205,38 @@ white-space: nowrap; } .reactionChips > :where(span + span) { - border-left: 1px solid - color-mix(in srgb, var(--bubble-foreground) 15%, transparent); + border-left: 1px solid var(--border-primary); } .bubbleActions { position: absolute; z-index: 2; right: -4px; bottom: calc(100% - 4px); + display: flex; + flex-wrap: wrap; + align-items: center; + width: max-content; + min-width: 0; + margin: 0; + border: 0; + max-width: min(280px, calc(100vw - 96px)); + padding: 0; + border-radius: 20px; + background: var(--bg-float); + color: var(--text-primary); + box-shadow: var(--shadow-sm); opacity: 0; pointer-events: none; } -.messageAction { - display: grid; - place-items: center; - width: 32px; - height: 32px; - padding: 0; - border: 0; - border-radius: 50%; - background: var(--surface-control); - color: var(--text); - box-shadow: var(--elevation-card); +.bubbleActions > :where([role="status"], [role="alert"]) { + order: 1; + flex-basis: 100%; + padding: 4px 8px; + overflow-wrap: anywhere; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); } .timestamp { opacity: 0; @@ -265,14 +246,11 @@ opacity: 1; } .message:hover .bubbleActions, -.message:focus-within .bubbleActions { +.message:focus-within .bubbleActions, +.bubbleActions:has([aria-expanded="true"], [role="status"], [role="alert"]) { opacity: 1; pointer-events: auto; } -.messageAction:hover, -.replies:hover { - background: var(--surface-hover); -} @media (hover: none) { .message:has(.bubbleActions) { padding-top: 32px; @@ -284,19 +262,20 @@ } } .replies { - border: 0; - border-radius: 999px; - background: var(--surface-accent); - padding: 4px 9px 4px 5px; - cursor: pointer; - display: inline-flex; - flex-wrap: wrap; - align-items: center; - gap: 6px; max-width: 100%; margin-top: 6px; - font-size: calc(12px * var(--buzz-text-scale, 1)); - color: var(--text); +} +.replies > button { + max-width: 100%; + height: auto; + min-height: var(--size-row); + flex-wrap: wrap; + padding-inline: 0; + + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); } .attachments { display: flex; @@ -311,11 +290,14 @@ display: inline-block; padding: 8px 12px; margin-top: 4px; - border: 1px solid var(--border); + border: 1px solid var(--border-primary); border-radius: 14px; - color: var(--link); - font-size: calc(12px * var(--buzz-text-scale, 1)); + color: var(--blue-12); overflow-wrap: anywhere; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); } .attachmentImage { /* Reserve geometry even across virtualizer remounts and failed/lazy loads. @@ -328,7 +310,7 @@ margin-top: 8px; overflow: hidden; border-radius: 10px; - background: var(--surface-hover); + background: var(--neutral-4); } .attachmentImage canvas, .attachmentImage img { @@ -490,9 +472,21 @@ align-items: center; flex-wrap: wrap; gap: 8px; - color: var(--warning); - font-size: calc(12px * var(--buzz-text-scale, 1)); + color: var(--text-secondary); margin-top: 6px; + + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); +} +.delivery > button { + padding-inline: 0; + color: inherit; + font-size: inherit; + line-height: inherit; + letter-spacing: inherit; + font-weight: inherit; } .composer textarea::placeholder { color: var(--text-muted); @@ -540,29 +534,15 @@ color: var(--text-muted); opacity: 1; } -.delivery button { - border: 0; - padding: 2px 6px; - font-size: inherit; - text-decoration: underline; - color: inherit; -} -.replies:hover { - border-color: var(--border-input); - background: var(--surface-hover); -} -.replies:focus-visible { - outline: 2px solid var(--focus); - outline-offset: 2px; -} .threadUnread { width: 8px; height: 8px; flex-shrink: 0; border-radius: 50%; - background: var(--link); + background: var(--purple-9); } .threadHistory { + background: var(--bg-panel); flex: 1; min-height: 0; overflow: auto; @@ -607,28 +587,15 @@ padding-right: 3px; } .threadAvatar { - position: relative; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; - width: 24px; - height: 24px; margin-right: -3px; - overflow: hidden; - border: 2px solid var(--surface); - border-radius: 50%; - background: var(--surface-accent); - color: var(--text-muted); - font-size: calc(9px * var(--buzz-text-scale, 1)); - line-height: 1; -} -.threadAvatar img { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; + border: 2px solid var(--bg-panel); + border-radius: var(--radius-pill); + background: var(--neutral-2); + color: var(--text-secondary); } .mentionRecipients { @@ -659,13 +626,6 @@ margin: 0; } -.text, -.plainText { - margin: 0; - font-size: calc(15px * var(--buzz-text-scale, 1)); - line-height: 1.5; - overflow-wrap: anywhere; -} .plainText { white-space: pre-wrap; } @@ -694,10 +654,10 @@ font-size: 1.08em; } .text :where(h1, h2, h3) { - font-weight: 700; + font-weight: 600; } .text :where(h4, h5, h6) { - font-weight: 650; + font-weight: 600; } .text.text :where(ul, ol) { padding-left: 1.5em; @@ -717,22 +677,25 @@ } .text blockquote { padding: 0.1em 0 0.1em 0.85em; - border-left: 1px solid var(--border-input); - color: var(--text-muted); + border-left: 1px solid var(--border-primary); + color: var(--text-secondary); } .text code { border-radius: 4px; - background: var(--surface-control); + background: var(--neutral-2); padding: 0.12em 0.32em; - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; - font-size: 0.88em; + font-family: var(--font-system-mono); + font-size: var(--text-mono); + line-height: var(--text-mono--line-height); + letter-spacing: var(--text-mono--letter-spacing); + font-weight: var(--text-mono--font-weight); } .text pre { max-width: 100%; overflow-x: auto; - border: 1px solid var(--border); + border: 1px solid var(--border-primary); border-radius: 10px; - background: var(--surface-input); + background: var(--neutral-2); padding: 12px 14px; scrollbar-width: thin; } @@ -752,34 +715,37 @@ max-width: 100%; overflow-x: auto; border-collapse: collapse; - font-size: 0.92em; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); overflow-wrap: normal; scrollbar-width: thin; white-space: nowrap; } .text :where(th, td) { - border: 1px solid var(--border); + border: 1px solid var(--border-primary); padding: 5px 9px; text-align: left; vertical-align: top; } .text th { - background: var(--surface-control); - font-weight: 650; + background: var(--neutral-2); + font-weight: 600; } .text hr { border: 0; - border-top: 1px solid var(--border); + border-top: 1px solid var(--border-primary); } .text input[type="checkbox"] { width: 1em; height: 1em; margin: 0 0.4em 0.1em 0; vertical-align: middle; - accent-color: var(--primary); + accent-color: var(--neutral-11); } .text a { - color: var(--link); + color: var(--blue-12); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; @@ -788,18 +754,10 @@ text-decoration-thickness: 2px; } .imageAlt { - color: var(--text-muted); + color: var(--text-secondary); font-style: italic; } -button.avatar { - padding: 0; - border: 0; - cursor: pointer; -} -button.avatar:hover { - box-shadow: 0 0 0 2px var(--border); -} .mention { display: inline; padding: 0 3px; @@ -807,16 +765,15 @@ button.avatar:hover { border-radius: 4px; font: inherit; line-height: inherit; - color: var(--on-selected); - background: var(--selected); + color: var(--purple-12); + background: var(--purple-3); cursor: pointer; } .mention:hover { text-decoration: underline; } -button.avatar:focus-visible, -.mention:focus-visible { - outline: 2px solid var(--focus); +html[data-keyboard-navigation] .mention:focus-visible { + outline: 2px solid var(--purple-8); outline-offset: 2px; } @@ -862,7 +819,7 @@ button.avatar:focus-visible, } .message[data-bubble-direction="outgoing"] .text :where(pre, code, th) { - color: var(--text); + color: var(--text-primary); } .message[data-bubble-direction="outgoing"] .text :where(blockquote, .imageAlt) { color: inherit; diff --git a/src/features/messages/ThreadPanel.test.tsx b/src/features/messages/ThreadPanel.test.tsx index 13ba0c37..4b378ceb 100644 --- a/src/features/messages/ThreadPanel.test.tsx +++ b/src/features/messages/ThreadPanel.test.tsx @@ -1,3 +1,5 @@ +import { Button } from "../../shared/design-system/ui/Button"; +import { Avatar } from "../../shared/design-system/ui/Avatar"; import { useReading } from "./use-reading"; import { beforeEach, expect, it, vi } from "vitest"; import { isValidElement, type ReactElement, type ReactNode } from "react"; @@ -94,7 +96,7 @@ function elements(node: ReactNode): ReactElement>[] { function button(tree: ReactNode, label: string) { const found = elements(tree).find( (e) => - e.type === "button" && + (e.type === "button" || e.type === Button) && (e.props.children === label || e.props["aria-label"] === label), ); expect(found, label).toBeDefined(); @@ -619,20 +621,17 @@ it("shows bounded participant avatars on the real reply control, through the med onOpenThread: () => {}, }); const control = button(tree, "View thread: 2 replies"); - const images = elements(control).filter((e) => e.type === "img"); - expect(images).toHaveLength(1); - expect(images[0]?.props).toMatchObject({ - src: "https://proxy/avatar", - alt: "", - loading: "lazy", - }); - const image = { hidden: false }; - const avatar = images[0]; - if (!avatar) throw new Error("Missing avatar"); - (avatar.props.onError as (event: unknown) => void)({ - currentTarget: image, - }); - expect(image.hidden).toBe(true); + const avatars = elements(control).filter((e) => e.type === Avatar); + expect(avatars).toHaveLength(3); + expect( + avatars.map(({ props }) => ({ src: props.src, fallback: props.fallback })), + ).toEqual([ + { src: "https://proxy/avatar", fallback: "Alice" }, + { src: null, fallback: "Brain" }, + { src: null, fallback: "p3" }, + ]); + expect(media).toHaveBeenCalledWith("https://safe/avatar"); + expect(media).toHaveBeenCalledWith("http://unsafe"); expect( elements(control) .filter((e) => e.props.title) diff --git a/src/features/messages/geometry.ts b/src/features/messages/geometry.ts index 2ac30b97..6b03ee5c 100644 --- a/src/features/messages/geometry.ts +++ b/src/features/messages/geometry.ts @@ -44,7 +44,7 @@ export const geometrySignature = ( profiles: ReadonlyMap, viewer?: string, ) => - `pulse-bubbles-v6:${viewer ?? ""}:` + + `pulse-bubbles-v7:${viewer ?? ""}:` + events .map((event) => { let signature = eventSignatures.get(event); diff --git a/tests/browser/reactions.spec.mjs b/tests/browser/reactions.spec.mjs index 0816b7f1..3c0aecb2 100644 --- a/tests/browser/reactions.spec.mjs +++ b/tests/browser/reactions.spec.mjs @@ -27,14 +27,27 @@ test("reaction plus opens a visible emoji-only picker, restores focus and publis await page.goto( `http://127.0.0.1:${server.httpServer.address().port}/tests/fixtures/emoji.html?reactions`, ); - const plus = page.getByRole("button", { + const messages = page.locator("[data-message-id]"); + await expect(messages).toHaveCount(6); + for (const row of await messages.all()) { + const toolbar = row.getByRole("group", { name: "Message actions" }); + await expect( + toolbar.getByRole("button", { name: "Add reaction", exact: true }), + ).toHaveCount(1); + await expect( + toolbar.getByRole("button", { name: "Reply in thread", exact: true }), + ).toHaveCount(1); + } + const message = messages.first(); + const plus = message.getByRole("button", { name: "Add reaction", exact: true, }); - // Only one fixture message has reactions; the others must have no action. - await expect(plus).toHaveCount(1); - const message = page.locator("[data-message-id]").filter({ has: plus }); - const reply = message.getByRole("button", { + const actions = message.getByRole("group", { name: "Message actions" }); + await expect( + actions.getByRole("button", { name: "Add reaction", exact: true }), + ).toHaveCount(1); + const reply = actions.getByRole("button", { name: "Reply in thread", exact: true, }); @@ -46,11 +59,14 @@ test("reaction plus opens a visible emoji-only picker, restores focus and publis const replyBox = await reply.boundingBox(); expect(plusBox).not.toBeNull(); expect(replyBox).not.toBeNull(); - expect(plusBox.x + plusBox.width).toBeLessThanOrEqual(replyBox.x); + expect(plusBox.x + plusBox.width).toBeCloseTo(replyBox.x, 1); + expect(plusBox.y).toBeCloseTo(replyBox.y, 1); } await plus.click(); const search = page.locator('em-emoji-picker input[type="search"]'); await expect(search).toBeVisible(); + await page.mouse.move(0, 0); + await expect(actions).toHaveCSS("opacity", "1"); const padding = await search.evaluate((input) => { const field = input.getBoundingClientRect(); const picker = input @@ -130,6 +146,8 @@ test("reaction plus opens a visible emoji-only picker, restores focus and publis ); expect(boundaryEvents.every(({ kind }) => kind === 7)).toBe(true); await page.evaluate(() => window.emojiFixture.rejectReaction()); + // Archiving remounted the action and cleared focus; reveal the hover toolbar again. + await message.hover(); await plus.click(); await page .locator("em-emoji-picker button") @@ -148,6 +166,29 @@ test("reaction plus opens a visible emoji-only picker, restores focus and publis page.evaluate(() => window.emojiFixture.report.publications.length), ) .toBe(5); + // Add the first reaction to a message that has no existing reactions. + const unreacted = messages.nth(1); + const targetId = await unreacted.getAttribute("data-message-id"); + await unreacted.hover(); + await unreacted + .getByRole("button", { name: "Add reaction", exact: true }) + .click(); + await page.locator('em-emoji-picker input[type="search"]').fill("party"); + await page + .locator("em-emoji-picker button") + .filter({ has: page.locator('img[src*="1.png"]') }) + .first() + .click(); + await expect + .poll(() => + page.evaluate(() => window.emojiFixture.report.publications.length), + ) + .toBe(6); + const firstReaction = await page.evaluate( + () => window.emojiFixture.report.publications.at(-1).event, + ); + expect(firstReaction.kind).toBe(7); + expect(firstReaction.tags).toContainEqual(["e", targetId]); expect(errors).toEqual([]); } finally { await server.close(); diff --git a/tests/fixtures/emoji.tsx b/tests/fixtures/emoji.tsx index 46d3e783..c7c2a633 100644 --- a/tests/fixtures/emoji.tsx +++ b/tests/fixtures/emoji.tsx @@ -159,7 +159,7 @@ const sessions = ["a", "b"].map((community) => { 6, [["emoji", "party", `${origin}/media/blocks.png`]], ); - live.receive([root]); + live.receive([root, broken, unloaded, single, table, blocks]); return { ...owner, community, diff --git a/tests/fixtures/message-bubbles.module.css b/tests/fixtures/message-bubbles.module.css index 10ec475b..77ef2968 100644 --- a/tests/fixtures/message-bubbles.module.css +++ b/tests/fixtures/message-bubbles.module.css @@ -6,17 +6,23 @@ gap: 4px; width: 56px; height: 36px; - color: var(--text-muted); + color: var(--text-secondary); } .agentAvatar { + display: grid; + place-items: center; + width: 32px; + height: 32px; + background: var(--neutral-2); + color: var(--text-secondary); border-radius: 30%; } .agentBadge { padding: 0 5px; - border: 1px solid var(--border); + border: 1px solid var(--border-primary); border-radius: 5px; - font-size: 10px; - line-height: 14px; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); } .dot { width: 6px; diff --git a/tests/fixtures/message-bubbles.tsx b/tests/fixtures/message-bubbles.tsx index 454ae728..6bc95fc0 100644 --- a/tests/fixtures/message-bubbles.tsx +++ b/tests/fixtures/message-bubbles.tsx @@ -1,7 +1,8 @@ // Local presentation sample; no session, credentials, network or publication. import { useState } from "react"; import { createRoot } from "react-dom/client"; -import { Bot } from "lucide-react"; +import { IconRobot } from "@tabler/icons-react"; +import { Avatar } from "../../src/shared/design-system/ui/Avatar"; import messageStyles from "../../src/features/messages/Messages.module.css"; import styles from "./message-bubbles.module.css"; import type { ChannelMessage } from "../../src/features/relay/contracts"; @@ -62,6 +63,7 @@ function TypingPreview({ agent = false }: { agent?: boolean }) {
@@ -76,7 +78,11 @@ function TypingPreview({ agent = false }: { agent?: boolean }) { className={`${messageStyles.avatar} ${agent ? styles.agentAvatar : ""}`} aria-hidden="true" > - {agent ? : "AL"} + {agent ? ( + + ) : ( + + )}
@@ -152,7 +158,8 @@ function Fixture() { maxWidth: narrow ? 360 : 760, margin: "0 auto", padding: "16px 12px 24px", - background: "var(--surface)", + background: "var(--bg-panel)", + color: "var(--text-primary)", borderRadius: 24, }} > @@ -182,8 +189,9 @@ function Fixture() {

{status}

From 0bcbc3e0514a7f9c5f6e16f4a661299111d125ba Mon Sep 17 00:00:00 2001 From: Arjun Mahanti Date: Wed, 16 Sep 2026 09:11:11 -0400 Subject: [PATCH 3/5] Preserve bubble styling across current message and virtualizer behavior Signed-off-by: Arjun Mahanti --- patches/README.md | 30 ++++- patches/virtua@0.51.0.patch | 75 ++++++++++-- pnpm-lock.yaml | 6 +- src/features/messages/Messages.module.css | 19 +-- src/features/messages/geometry.ts | 2 +- .../messages/virtua-compensation.test.mjs | 109 +++++++++++++++++- tests/browser/buzz-links.spec.mjs | 18 ++- tests/browser/history-loading.spec.mjs | 56 +++++---- tests/browser/profiles-appearance.spec.mjs | 34 +++--- 9 files changed, 275 insertions(+), 74 deletions(-) diff --git a/patches/README.md b/patches/README.md index b7403138..832d8252 100644 --- a/patches/README.md +++ b/patches/README.md @@ -1,4 +1,4 @@ -# Virtua 0.51.0 macOS WebKit correction boundary +# Virtua 0.51.0 element-scroller corrections The application imports the React ESM entry (`virtua` → `lib/index.js`) from `src/features/messages/ChannelTimeline.tsx`. Only that entry's element scroller is @@ -41,8 +41,8 @@ CSS, forced layout, alternate store sizing, or new scroll scheduler is introduce The platform predicate requires MacIntel and Apple vendor, excluding Virtua's iOS detector (including desktop-mode iPad). Chrome/Firefox, non-Mac WebKit and iOS keep -existing policy. Store/layout/observer timing and imperative smooth/instant -navigation remain stock. Scheduler-driven reveal/restore/bottom navigation is a +existing policy. Imperative smooth/instant navigation remains stock. New row observation +is deferred as described below. Scheduler-driven reveal/restore/bottom navigation is a separate acceptance path, not implicitly repaired by the automatic-correction fix. Native reveal controls showed one/two transient blank interior source frames before immediate recovery, despite valid sampled DOM coverage. This remaining @@ -50,6 +50,28 @@ imperative-path flicker is not the sustained automatic-correction failure; the patch does not claim to fix it. The stale source-map directive is removed because the generated map is unpatched. +## New row observation + +Compact grouped bubbles can cause the initial measured range to reveal more +siblings. Virtua synchronously commits their sizes inside ResizeObserver, mounts +those siblings, and starts observing them in the same delivery cycle. WebKit then +reports skipped notifications at the same DOM depth. + +The element-scroller driver batches new row registrations in the next animation +frame. Existing row and viewport measurements remain synchronous, preserving +scroll correction timing. Unobserving drops a pending registration; disposal +cancels the frame and clears the batch. Rows registered before driver attachment +are observed after attachment. Hidden rows remain observed so later visibility +changes can be measured. This applies only to the existing React ESM element +scroller, with no new adapter or window-scroller patch. + +This adds up to one frame before newly mounted rows begin reporting sizes; warm +cached geometry remains available. The strict membership browser tests reproduce +the original observer errors and exercise the fix without suppressing errors. +Installed-bundle tests cover registration timing, synchronous measurements, +unmount, reassignment, disposal and remount. Scroll, image, initial-position and +opening checks remain the integration gates. + ## Automated checks ```sh @@ -61,7 +83,7 @@ bin/pnpm test:browser history-loading.spec.mjs image-scroll.spec.mjs initial-pos --project chromium --project webkit --no-deps --workers=1 ``` -The 13 driver/store/observer contracts evaluate the installed React ESM, not a +The 17 driver/store/observer contracts evaluate the installed React ESM, not a copied implementation. They cover active and inferred-idle corrections, zero jumps, positive/negative measurements, absolute edges, horizontal RTL, overlapping restoration, CSS priority, disposal/remount, later declarations, platform controls, diff --git a/patches/virtua@0.51.0.patch b/patches/virtua@0.51.0.patch index a1d36783..e80f771f 100644 --- a/patches/virtua@0.51.0.patch +++ b/patches/virtua@0.51.0.patch @@ -1,18 +1,24 @@ diff --git a/lib/index.js b/lib/index.js +index a183cc7b1669aab25467840540ce3bd1c025fb47..d37aaaa2ca664d03185b6e886e680fa20f5f5ed9 100644 --- a/lib/index.js +++ b/lib/index.js -@@ -7,1 +7,5 @@ +@@ -6,6 +6,10 @@ import { jsx as c } from "react/jsx-runtime"; + import { flushSync as f } from "react-dom"; -+ + +// WebKit can restore a stale native scroll offset after an instant correction. +// Interrupt only the corrected axis; observer-inferred idle is not native idle. +const isMacWebKit = () => typeof navigator !== "undefined" && !b() && navigator.platform === "MacIntel" && navigator.vendor === "Apple Computer, Inc."; -@@ -249,7 +253,22 @@ ++ + var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v = e => [ ...e ].sort((e, t) => e - t), p = setTimeout, S = clearTimeout, m = "function" == typeof queueMicrotask ? queueMicrotask : e => { + Promise.resolve().then(e); + }, $ = () => { +@@ -249,24 +253,53 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v o && o(); } ]; }, E = (e, t) => { - let n, o, r = $(), i = !1; -+ let n, o, r = $(), i = !1, restoreOverflow; ++ let n, o, r = $(), i = !1, restoreOverflow, observationFrame, mounted = false; + const interruptMomentum = () => { + // Repeated corrections in one task share the original declaration. + restoreOverflow && restoreOverflow(); @@ -31,9 +37,37 @@ diff --git a/lib/index.js b/lib/index.js const s = t ? "scrollLeft" : "scrollTop", l = t ? "left" : "top", c = t ? "overflowX" : "overflowY", [f, a] = O(e, () => r[0], (e, t) => { n.scrollTo({ [l]: T(e, i), -@@ -266,7 +285,8 @@ + behavior: t ? "smooth" : "instant" + }); +- }), u = t ? "width" : "height", d = /* @__PURE__ */ new WeakMap, h = C(t => { +- const o = []; +- for (const {target: r, contentRect: i} of t) if (r.offsetParent) if (r === n) e.W(4, i[u]); else { +- const e = d.get(r); +- null != e && o.push([ e, i[u] ]); ++ }), u = t ? "width" : "height", d = /* @__PURE__ */ new WeakMap, pendingRows = new Set; ++ const observeRows = () => { ++ observationFrame = void 0; ++ for (const row of pendingRows) h.A(row); ++ pendingRows.clear(); ++ }, scheduleObservations = () => { ++ if (mounted && pendingRows.size && observationFrame === void 0) ++ observationFrame = z(_(n)).requestAnimationFrame(observeRows); ++ }, h = C(entries => { ++ if (!mounted) return; ++ const updates = []; ++ for (const {target, contentRect} of entries) if (target.offsetParent) { ++ if (target === n) e.W(4, contentRect[u]); ++ else { ++ const index = d.get(target); ++ if (index != null) updates.push([index, contentRect[u]]); ++ } + } +- o.length && e.W(3, o); ++ updates.length && e.W(3, updates); + }); return { D(f, u = f.parentElement) { ++ mounted = true; h.A(n = u), t && (i = "rtl" === getComputedStyle(u).direction), o = M(e, u, t, () => T(u[s], i), (t, n, o) => { - if (o) { + if (isMacWebKit()) interruptMomentum(); @@ -41,15 +75,34 @@ diff --git a/lib/index.js b/lib/index.js const e = u.style, t = e[c]; e[c] = "hidden", p(() => { e[c] = t; -@@ -283,7 +303,7 @@ - }), r[1](!0); +@@ -280,13 +313,19 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v + [l]: T(t, i), + behavior: "instant" + }), n && a(); +- }), r[1](!0); ++ }), r[1](!0), scheduleObservations(); }, _() { - h.X(), o && o.X(), r[1](!1), r = $(); +- }, +- P: (e, t) => (d.set(e, t), h.A(e), () => { +- d.delete(e), h.B(e); ++ mounted = false; ++ if (observationFrame !== void 0) z(_(n)).cancelAnimationFrame(observationFrame); ++ observationFrame = void 0; ++ pendingRows.clear(); + restoreOverflow && restoreOverflow(), h.X(), o && o.X(), r[1](!1), r = $(); - }, - P: (e, t) => (d.set(e, t), h.A(e), () => { - d.delete(e), h.B(e); -@@ -799,2 +819,1 @@ ++ }, ++ // New siblings must not start ResizeObserver delivery in the same cycle ++ // that measured rows synchronously expand the rendered range. ++ P: (e, t) => (d.set(e, t), pendingRows.add(e), scheduleObservations(), () => { ++ pendingRows.delete(e), d.delete(e), n && h.B(e); + }), + V: f, + J() { +@@ -797,4 +836,3 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v + }); + export { G as VList, j as Virtualizer, U as WindowVirtualizer, N as experimental_VGrid }; +\ No newline at end of file -//# sourceMappingURL=index.js.map diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db0096c5..300d2135 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false patchedDependencies: - virtua@0.51.0: 14ff685d9bc68b34d1a7c6b0042d6000e4b07a9746088fc3842c89c4a995ca9d + virtua@0.51.0: f239b1aae37feb80f6196fb45869070007612b58a1adec20207eeb328eab9ce2 importers: @@ -79,7 +79,7 @@ importers: version: 4.0.1 virtua: specifier: 0.51.0 - version: 0.51.0(patch_hash=14ff685d9bc68b34d1a7c6b0042d6000e4b07a9746088fc3842c89c4a995ca9d)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 0.51.0(patch_hash=f239b1aae37feb80f6196fb45869070007612b58a1adec20207eeb328eab9ce2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) yaml: specifier: 2.8.3 version: 2.8.3 @@ -3472,7 +3472,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - virtua@0.51.0(patch_hash=14ff685d9bc68b34d1a7c6b0042d6000e4b07a9746088fc3842c89c4a995ca9d)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + virtua@0.51.0(patch_hash=f239b1aae37feb80f6196fb45869070007612b58a1adec20207eeb328eab9ce2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): optionalDependencies: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) diff --git a/src/features/messages/Messages.module.css b/src/features/messages/Messages.module.css index 484db1db..9798c600 100644 --- a/src/features/messages/Messages.module.css +++ b/src/features/messages/Messages.module.css @@ -61,7 +61,7 @@ --bubble-foreground: var(--text-primary); display: flex; gap: calc(var(--space-2) + var(--space-half)); - padding: var(--space-6) var(--space-2) 0; + padding: var(--space-6) var(--space-2) var(--space-half); } .message[data-bubble-direction="outgoing"] { --bubble-background: var(--neutral-11); @@ -69,7 +69,7 @@ justify-content: flex-end; } .message.continuation { - padding-top: var(--space-half); + padding-top: 0; } .avatarSpace { width: 32px; @@ -131,6 +131,15 @@ } .text, .plainText { + margin: var(--space-1) 0 0; + font-size: var(--text-body-sm); + line-height: var(--text-body-sm--line-height); + letter-spacing: var(--text-body-sm--letter-spacing); + font-weight: var(--text-body-sm--font-weight); + overflow-wrap: anywhere; +} +/* Markdown also renders inline composer tokens; only message rows are bubbles. */ +.bubbleAnchor > :is(.text, .plainText) { align-self: stretch; margin: 0; max-width: 100%; @@ -138,12 +147,6 @@ padding: var(--space-2) var(--space-4); background: var(--bubble-background); color: var(--bubble-foreground); - font-size: var(--text-body); - line-height: var(--text-body--line-height); - letter-spacing: var(--text-body--letter-spacing); - font-weight: var(--text-body--font-weight); - white-space: normal; - overflow-wrap: anywhere; } .text[data-single-emoji] { --inline-emoji-size: var(--size-emoji-display); diff --git a/src/features/messages/geometry.ts b/src/features/messages/geometry.ts index 6b03ee5c..87c12b33 100644 --- a/src/features/messages/geometry.ts +++ b/src/features/messages/geometry.ts @@ -44,7 +44,7 @@ export const geometrySignature = ( profiles: ReadonlyMap, viewer?: string, ) => - `pulse-bubbles-v7:${viewer ?? ""}:` + + `pulse-bubbles-v8:${viewer ?? ""}:` + events .map((event) => { let signature = eventSignatures.get(event); diff --git a/src/features/messages/virtua-compensation.test.mjs b/src/features/messages/virtua-compensation.test.mjs index 696f24e5..081bb31d 100644 --- a/src/features/messages/virtua-compensation.test.mjs +++ b/src/features/messages/virtua-compensation.test.mjs @@ -27,6 +27,7 @@ function setup({ horizontal = false, direction = "ltr", offset = 1300, + attach = true, } = {}) { const { store: createStore, @@ -48,6 +49,10 @@ function setup({ declarations.set(name, [value, priority]), removeProperty: (name) => declarations.delete(name), }; + let resize; + const observed = new Set(); + let frameId = 0; + const frames = new Map(); const viewport = new EventTarget(); const calls = []; const axis = horizontal ? "overflow-x" : "overflow-y"; @@ -60,10 +65,24 @@ function setup({ scrollLeft: 0, ownerDocument: { defaultView: { + requestAnimationFrame: (callback) => { + frames.set(++frameId, callback); + return frameId; + }, + cancelAnimationFrame: (id) => frames.delete(id), ResizeObserver: class { - observe() {} - unobserve() {} - disconnect() {} + constructor(callback) { + resize = callback; + } + observe(row) { + observed.add(row); + } + unobserve(row) { + observed.delete(row); + } + disconnect() { + observed.clear(); + } }, }, }, @@ -83,7 +102,7 @@ function setup({ store.W(4, 500); // measured viewport store.W(1, offset); // observed native scrolling const driver = createDriver(store, horizontal); - driver.D({}, viewport); + if (attach) driver.D({}, viewport); return { store, driver, @@ -91,6 +110,14 @@ function setup({ style, axis, calls, + frames, + observed, + resize: (entries) => resize(entries), + frame() { + const pending = [...frames.values()]; + frames.clear(); + for (const callback of pending) callback(); + }, prepend(length = 40) { store.W(5, [length, true]); driver.J(); @@ -249,3 +276,77 @@ for (const [name, config, deferred] of [ c.driver._(); }); } + +it("defers new row registration but keeps measurement delivery synchronous", () => { + const c = setup({ attach: false }); + const row = { offsetParent: c.viewport }; + c.driver.P(row, 0); // Child registration can precede driver attachment. + expect(c.observed.size).toBe(0); + c.driver.D({}, c.viewport); + expect(c.observed.has(c.viewport)).toBe(true); + expect(c.observed.has(row)).toBe(false); + expect(c.frames.size).toBe(1); + c.frame(); + expect(c.observed.has(row)).toBe(true); + c.resize([ + { target: c.viewport, contentRect: { height: 600 } }, + { target: row, contentRect: { height: 50 } }, + ]); + expect(c.store.o()).toBe(600); + expect(c.store.u(1)).toBe(50); + expect(c.frames.size).toBe(0); + c.driver._(); +}); + +it("cancels unmounted registration and observes hidden and reassigned rows", () => { + const c = setup(); + const rows = Array.from({ length: 3 }, () => ({ offsetParent: c.viewport })); + const release = rows.map((row, index) => c.driver.P(row, index)); + release[0](); + rows[1].offsetParent = null; + release[2](); + c.driver.P(rows[2], 3); + expect(c.frames.size).toBe(1); + c.frame(); + expect(c.observed.has(rows[0])).toBe(false); + expect(c.observed.has(rows[1])).toBe(true); // It must report becoming visible later. + expect(c.observed.has(rows[2])).toBe(true); + rows[1].offsetParent = c.viewport; + c.resize( + rows.slice(1).map((target) => ({ target, contentRect: { height: 50 } })), + ); + expect(c.store.u(4)).toBe(300); + c.driver._(); +}); + +it("cancels registrations on disposal and accepts fresh registrations after remount", () => { + const c = setup(); + const row = { offsetParent: c.viewport }; + const release = c.driver.P(row, 0); + c.driver._(); + expect(c.frames.size).toBe(0); + c.frame(); + expect(c.observed.size).toBe(0); + c.resize([{ target: row, contentRect: { height: 50 } }]); + expect(c.store.u(1)).toBe(100); + release(); + c.driver.P(row, 0); + c.driver.D({}, c.viewport); + c.frame(); + expect(c.observed.has(row)).toBe(true); + c.resize([{ target: row, contentRect: { height: 60 } }]); + expect(c.store.u(1)).toBe(60); + c.driver._(); +}); + +it("releases rows before attachment without creating or reviving an observer", () => { + const c = setup({ attach: false }); + const row = { offsetParent: c.viewport }; + const release = c.driver.P(row, 0); + expect(() => release()).not.toThrow(); + c.driver._(); + c.driver.D({}, c.viewport); + c.frame(); + expect(c.observed.has(row)).toBe(false); + c.driver._(); +}); diff --git a/tests/browser/buzz-links.spec.mjs b/tests/browser/buzz-links.spec.mjs index 4a4bf88e..cf4319eb 100644 --- a/tests/browser/buzz-links.spec.mjs +++ b/tests/browser/buzz-links.spec.mjs @@ -15,15 +15,17 @@ test("Buzz channel and message links render, reveal verified targets, and preser page, app, }) => { - app.relay.holdProfiles([app.viewer]); - await open(page, app); const history = app.histories.get("primary/alpha"); + app.relay.holdProfiles([history[0].pubkey]); + await open(page, app); const target = history.find((row) => row.content === "Broadcast reply"); const href = `buzz://message?channel=alpha&id=${target.id}`; const message = app.append( "primary", "alpha", `Open <${href}> or .`, + true, + false, ); const row = page.locator( `[data-channel-timeline] [data-message-id="${message.id}"]`, @@ -92,7 +94,7 @@ test("Buzz channel and message links render, reveal verified targets, and preser app.relay.releaseProfiles(); await expect( row.getByRole("button", { - name: "View Fixture Reader profile", + name: "View Alice Fixture profile", exact: true, }), ).toBeVisible(); @@ -128,7 +130,13 @@ test("activating a panel from a linked thread retires the navigation-owned threa const history = app.histories.get("primary/alpha"); const target = history.find((row) => row.content === "Broadcast reply"); const href = `buzz://message?channel=alpha&id=${target.id}`; - const message = app.append("primary", "alpha", `Open <${href}>.`); + const message = app.append( + "primary", + "alpha", + `Open <${href}>.`, + true, + false, + ); const row = page.locator( `[data-channel-timeline] [data-message-id="${message.id}"]`, ); @@ -147,7 +155,7 @@ test("activating a panel from a linked thread retires the navigation-owned threa // thread target, so it must be retired rather than share the rail slot with // the newly activated panel. (The fixture registers a catch-all panel.) await row - .getByRole("button", { name: "View Fixture Reader profile", exact: true }) + .getByRole("button", { name: "View Alice Fixture profile", exact: true }) .click(); await expect( page.getByRole("complementary", { name: "Wrong panel", exact: true }), diff --git a/tests/browser/history-loading.spec.mjs b/tests/browser/history-loading.spec.mjs index 3507345f..e1071299 100644 --- a/tests/browser/history-loading.spec.mjs +++ b/tests/browser/history-loading.spec.mjs @@ -5,32 +5,38 @@ test.use({ productionBroker: true }); const history = (page) => page.getByRole("region", { name: "Channel message history" }); -test("automatic history starts before the top in a production broker session", async ({ - page, - app, -}) => { - await open(page, app); - await expect( - page.getByRole("button", { name: "Retry live updates", exact: true }), - ).toHaveCount(0); - await history(page).hover(); - for (let i = 0; i < 100 && !app.pending.length; i++) { +// Keep enough initial history to start outside the prefetch zone even when +// adjacent messages use the compact grouped layout. +const prefetchTest = test.extend({ tallMessages: true }); +prefetchTest( + "automatic history starts before the top in a production broker session", + async ({ page, app }) => { + await open(page, app); + await expect( + page.getByRole("button", { name: "Retry live updates", exact: true }), + ).toHaveCount(0); + expect( + await history(page).evaluate( + (el) => el.scrollTop - Math.max(3000, el.clientHeight * 4), + ), + "initial history starts outside the prefetch zone", + ).toBeGreaterThan(0); + // Position just outside the prefetch zone, then cross it with one genuine + // wheel input. Repeated wheels can outrun the broker's request notification. + await history(page).evaluate((el) => { + el.scrollTop = Math.max(3000, el.clientHeight * 4) + 300; + }); + await settle(page); + await history(page).hover(); await page.mouse.wheel(0, -450); - await page.waitForTimeout(40); - if ( - await history(page) - .getByRole("button", { name: "Loading older…", exact: true }) - .count() - ) - break; - } - await expect.poll(() => app.pending.length).toBe(1); - const top = await history(page).evaluate((e) => e.scrollTop); - app.report.measurements.push({ automaticRequestTop: top }); - expect(top).toBeGreaterThan(1000); - app.pending.shift().release(); - await settle(page); -}); + await expect.poll(() => app.pending.length).toBe(1); + const top = await history(page).evaluate((e) => e.scrollTop); + app.report.measurements.push({ automaticRequestTop: top }); + expect(top).toBeGreaterThan(1000); + app.pending.shift().release(); + await settle(page); + }, +); test("returning to the top continues history loading on wheel without a button", async ({ page, diff --git a/tests/browser/profiles-appearance.spec.mjs b/tests/browser/profiles-appearance.spec.mjs index 06a56594..7832e32a 100644 --- a/tests/browser/profiles-appearance.spec.mjs +++ b/tests/browser/profiles-appearance.spec.mjs @@ -18,19 +18,27 @@ for (const mode of ["light", "dark"]) { const history = page.getByRole("region", { name: "Channel message history", }); - const messageId = await history.evaluate((element) => { - const bounds = element.getBoundingClientRect(); - const avatar = Array.from( - element.querySelectorAll( - 'button[aria-label="View Alice Fixture profile"]', - ), - ).find((button) => { - const rect = button.getBoundingClientRect(); - return rect.top >= bounds.top && rect.bottom <= bounds.bottom; - }); - if (!avatar) throw new Error("No fully visible profile avatar"); - return avatar.closest("[data-message-id]").dataset.messageId; - }); + let messageId; + await expect + .poll( + async () => { + messageId = await history.evaluate((element) => { + const bounds = element.getBoundingClientRect(); + const avatar = Array.from( + element.querySelectorAll( + 'button[aria-label="View Alice Fixture profile"]', + ), + ).find((button) => { + const rect = button.getBoundingClientRect(); + return rect.top >= bounds.top && rect.bottom <= bounds.bottom; + }); + return avatar?.closest("[data-message-id]").dataset.messageId; + }); + return messageId; + }, + { message: "profile name and group-final avatar are visible" }, + ) + .toBeTruthy(); const avatar = history .locator(`[data-message-id="${messageId}"]`) .getByRole("button", { From 14541abcdb36121d2dea45e186ecfe2fb1e6075b Mon Sep 17 00:00:00 2001 From: Arjun Mahanti Date: Wed, 16 Sep 2026 09:35:55 -0400 Subject: [PATCH 4/5] Preserve restored reading intent and defer reentrant row observation Signed-off-by: Arjun Mahanti --- patches/README.md | 43 ++++++----- patches/virtua@0.51.0.patch | 71 +++++++++--------- pnpm-lock.yaml | 6 +- .../messages/ChannelTimeline.test.tsx | 21 ++++++ src/features/messages/ChannelTimeline.tsx | 5 +- .../messages/virtua-compensation.test.mjs | 73 ++++++++++++++++--- 6 files changed, 144 insertions(+), 75 deletions(-) diff --git a/patches/README.md b/patches/README.md index 832d8252..1c82521f 100644 --- a/patches/README.md +++ b/patches/README.md @@ -1,4 +1,4 @@ -# Virtua 0.51.0 element-scroller corrections +# Virtua 0.51.0 macOS WebKit correction boundary The application imports the React ESM entry (`virtua` → `lib/index.js`) from `src/features/messages/ChannelTimeline.tsx`. Only that entry's element scroller is @@ -41,8 +41,9 @@ CSS, forced layout, alternate store sizing, or new scroll scheduler is introduce The platform predicate requires MacIntel and Apple vendor, excluding Virtua's iOS detector (including desktop-mode iPad). Chrome/Firefox, non-Mac WebKit and iOS keep -existing policy. Imperative smooth/instant navigation remains stock. New row observation -is deferred as described below. Scheduler-driven reveal/restore/bottom navigation is a +existing correction policy. Store/layout updates, ordinary row observation and +imperative smooth/instant navigation retain upstream timing. Registrations made +inside resize delivery are deferred as described below. Scheduler-driven reveal/restore/bottom navigation is a separate acceptance path, not implicitly repaired by the automatic-correction fix. Native reveal controls showed one/two transient blank interior source frames before immediate recovery, despite valid sampled DOM coverage. This remaining @@ -50,27 +51,25 @@ imperative-path flicker is not the sustained automatic-correction failure; the patch does not claim to fix it. The stale source-map directive is removed because the generated map is unpatched. -## New row observation +## Observation during resize delivery -Compact grouped bubbles can cause the initial measured range to reveal more -siblings. Virtua synchronously commits their sizes inside ResizeObserver, mounts -those siblings, and starts observing them in the same delivery cycle. WebKit then -reports skipped notifications at the same DOM depth. +Compact grouped bubbles can cause measured rows to reveal more siblings. When +Virtua synchronously renders and observes those siblings inside ResizeObserver, +WebKit reports skipped notifications at the same DOM depth. -The element-scroller driver batches new row registrations in the next animation -frame. Existing row and viewport measurements remain synchronous, preserving -scroll correction timing. Unobserving drops a pending registration; disposal -cancels the frame and clears the batch. Rows registered before driver attachment -are observed after attachment. Hidden rows remain observed so later visibility -changes can be measured. This applies only to the existing React ESM element -scroller, with no new adapter or window-scroller patch. +Only registrations made during resize delivery wait until the next animation +frame. Ordinary mounting (including before driver attachment), size delivery, +adaptive estimates, and scroll corrections keep their upstream timing. The row's +owner window schedules the frame. Unobserving removes a pending registration; +disposal cancels the frame and clears pending rows. Hidden rows stay observed so +later visibility changes can be measured. A `finally` resets the delivery flag +if a subscriber throws. This extends only the already-patched React ESM element +scroller; no other adapter or window scroller is changed. -This adds up to one frame before newly mounted rows begin reporting sizes; warm -cached geometry remains available. The strict membership browser tests reproduce -the original observer errors and exercise the fix without suppressing errors. -Installed-bundle tests cover registration timing, synchronous measurements, -unmount, reassignment, disposal and remount. Scroll, image, initial-position and -opening checks remain the integration gates. +Installed-bundle tests cover reentrant registration, synchronous measurements, +pre-attachment cleanup, hidden/reassigned rows, cancellation, remount and errors. +Strict membership, pagination, cold restoration and opening browser checks cover +the integration without suppressing observer errors or changing timing budgets. ## Automated checks @@ -83,7 +82,7 @@ bin/pnpm test:browser history-loading.spec.mjs image-scroll.spec.mjs initial-pos --project chromium --project webkit --no-deps --workers=1 ``` -The 17 driver/store/observer contracts evaluate the installed React ESM, not a +The 18 driver/store/observer contracts evaluate the installed React ESM, not a copied implementation. They cover active and inferred-idle corrections, zero jumps, positive/negative measurements, absolute edges, horizontal RTL, overlapping restoration, CSS priority, disposal/remount, later declarations, platform controls, diff --git a/patches/virtua@0.51.0.patch b/patches/virtua@0.51.0.patch index e80f771f..48d2229c 100644 --- a/patches/virtua@0.51.0.patch +++ b/patches/virtua@0.51.0.patch @@ -1,5 +1,5 @@ diff --git a/lib/index.js b/lib/index.js -index a183cc7b1669aab25467840540ce3bd1c025fb47..d37aaaa2ca664d03185b6e886e680fa20f5f5ed9 100644 +index a183cc7b1669aab25467840540ce3bd1c025fb47..483f3d281edf5640fd99abe5104ceccd82bcaec3 100644 --- a/lib/index.js +++ b/lib/index.js @@ -6,6 +6,10 @@ import { jsx as c } from "react/jsx-runtime"; @@ -13,12 +13,12 @@ index a183cc7b1669aab25467840540ce3bd1c025fb47..d37aaaa2ca664d03185b6e886e680fa2 var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v = e => [ ...e ].sort((e, t) => e - t), p = setTimeout, S = clearTimeout, m = "function" == typeof queueMicrotask ? queueMicrotask : e => { Promise.resolve().then(e); }, $ = () => { -@@ -249,24 +253,53 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v +@@ -249,24 +253,58 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v o && o(); } ]; }, E = (e, t) => { - let n, o, r = $(), i = !1; -+ let n, o, r = $(), i = !1, restoreOverflow, observationFrame, mounted = false; ++ let n, o, r = $(), i = !1, restoreOverflow, deliveringResize = false, observationFrame, observationWindow; + const interruptMomentum = () => { + // Repeated corrections in one task share the original declaration. + restoreOverflow && restoreOverflow(); @@ -45,29 +45,34 @@ index a183cc7b1669aab25467840540ce3bd1c025fb47..d37aaaa2ca664d03185b6e886e680fa2 - const e = d.get(r); - null != e && o.push([ e, i[u] ]); + }), u = t ? "width" : "height", d = /* @__PURE__ */ new WeakMap, pendingRows = new Set; -+ const observeRows = () => { -+ observationFrame = void 0; -+ for (const row of pendingRows) h.A(row); -+ pendingRows.clear(); -+ }, scheduleObservations = () => { -+ if (mounted && pendingRows.size && observationFrame === void 0) -+ observationFrame = z(_(n)).requestAnimationFrame(observeRows); -+ }, h = C(entries => { -+ if (!mounted) return; -+ const updates = []; -+ for (const {target, contentRect} of entries) if (target.offsetParent) { -+ if (target === n) e.W(4, contentRect[u]); -+ else { -+ const index = d.get(target); -+ if (index != null) updates.push([index, contentRect[u]]); ++ const observeRow = row => { ++ if (!deliveringResize) return h.A(row); ++ // Newly rendered siblings must start observation after this delivery cycle. ++ pendingRows.add(row); ++ if (observationFrame === void 0) { ++ observationWindow = z(_(row)); ++ observationFrame = observationWindow.requestAnimationFrame(() => { ++ observationFrame = void 0; ++ for (const target of pendingRows) h.A(target); ++ pendingRows.clear(); ++ }); ++ } ++ }, h = C(t => { ++ deliveringResize = true; ++ try { ++ const o = []; ++ for (const {target: r, contentRect: i} of t) if (r.offsetParent) if (r === n) e.W(4, i[u]); else { ++ const e = d.get(r); ++ null != e && o.push([ e, i[u] ]); + } ++ o.length && e.W(3, o); ++ } finally { ++ deliveringResize = false; } - o.length && e.W(3, o); -+ updates.length && e.W(3, updates); }); return { D(f, u = f.parentElement) { -+ mounted = true; h.A(n = u), t && (i = "rtl" === getComputedStyle(u).direction), o = M(e, u, t, () => T(u[s], i), (t, n, o) => { - if (o) { + if (isMacWebKit()) interruptMomentum(); @@ -75,32 +80,24 @@ index a183cc7b1669aab25467840540ce3bd1c025fb47..d37aaaa2ca664d03185b6e886e680fa2 const e = u.style, t = e[c]; e[c] = "hidden", p(() => { e[c] = t; -@@ -280,13 +313,19 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v - [l]: T(t, i), - behavior: "instant" - }), n && a(); -- }), r[1](!0); -+ }), r[1](!0), scheduleObservations(); +@@ -283,10 +321,13 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v + }), r[1](!0); }, _() { - h.X(), o && o.X(), r[1](!1), r = $(); -- }, -- P: (e, t) => (d.set(e, t), h.A(e), () => { -- d.delete(e), h.B(e); -+ mounted = false; -+ if (observationFrame !== void 0) z(_(n)).cancelAnimationFrame(observationFrame); ++ if (observationFrame !== void 0) observationWindow.cancelAnimationFrame(observationFrame); + observationFrame = void 0; + pendingRows.clear(); + restoreOverflow && restoreOverflow(), h.X(), o && o.X(), r[1](!1), r = $(); -+ }, -+ // New siblings must not start ResizeObserver delivery in the same cycle -+ // that measured rows synchronously expand the rendered range. -+ P: (e, t) => (d.set(e, t), pendingRows.add(e), scheduleObservations(), () => { -+ pendingRows.delete(e), d.delete(e), n && h.B(e); + }, +- P: (e, t) => (d.set(e, t), h.A(e), () => { +- d.delete(e), h.B(e); ++ P: (e, t) => (d.set(e, t), observeRow(e), () => { ++ pendingRows.delete(e), d.delete(e), h.B(e); }), V: f, J() { -@@ -797,4 +836,3 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v +@@ -797,4 +838,3 @@ var {min: a, max: u, abs: d, floor: h} = Math, g = (e, t, n) => a(n, u(t, e)), v }); export { G as VList, j as Virtualizer, U as WindowVirtualizer, N as experimental_VGrid }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 300d2135..3c65a702 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false patchedDependencies: - virtua@0.51.0: f239b1aae37feb80f6196fb45869070007612b58a1adec20207eeb328eab9ce2 + virtua@0.51.0: 9b2a68ffddc241131ba6203ecb7359d7d11cccc84ef46077856d5a85049b0b70 importers: @@ -79,7 +79,7 @@ importers: version: 4.0.1 virtua: specifier: 0.51.0 - version: 0.51.0(patch_hash=f239b1aae37feb80f6196fb45869070007612b58a1adec20207eeb328eab9ce2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 0.51.0(patch_hash=9b2a68ffddc241131ba6203ecb7359d7d11cccc84ef46077856d5a85049b0b70)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) yaml: specifier: 2.8.3 version: 2.8.3 @@ -3472,7 +3472,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - virtua@0.51.0(patch_hash=f239b1aae37feb80f6196fb45869070007612b58a1adec20207eeb328eab9ce2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + virtua@0.51.0(patch_hash=9b2a68ffddc241131ba6203ecb7359d7d11cccc84ef46077856d5a85049b0b70)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): optionalDependencies: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) diff --git a/src/features/messages/ChannelTimeline.test.tsx b/src/features/messages/ChannelTimeline.test.tsx index db09202f..9978ebcb 100644 --- a/src/features/messages/ChannelTimeline.test.tsx +++ b/src/features/messages/ChannelTimeline.test.tsx @@ -794,6 +794,27 @@ it("late measurements do not convert reading-anchor restoration to bottom follow expect(h.handle.scrollToIndex).not.toHaveBeenCalled(); h.unmount(); }); +it.each([false, true])( + "cold extent clamping preserves restored reading until a real bottom gesture=%s", + (gesture) => { + const h = setup({ + initial: { offset: 80851, bottom: false, anchor: { id: "last", y: 42 } }, + mounted: [{ id: "last", y: 42 }], + }); + // Cold geometry temporarily ends at the restored offset, then grows. + h.element.scrollHeight = h.element.scrollTop + h.element.clientHeight; + h.dispatchScroll(); + h.element.scrollHeight += 650; + h.dispatchScroll(); + if (gesture) { + h.element.scrollTop = h.element.scrollHeight - h.element.clientHeight; + h.scroll(); + } + h.unmount(); + expect(h.saved().bottom).toBe(gesture); + expect(h.saved().anchor).toEqual({ id: "last", y: 42 }); + }, +); it("prepending retires the preceding bottom-reflow observer and its queued frame", () => { const h = setup(); h.element.scrollTop = 3038; diff --git a/src/features/messages/ChannelTimeline.tsx b/src/features/messages/ChannelTimeline.tsx index 202a3d19..7aea8fa4 100644 --- a/src/features/messages/ChannelTimeline.tsx +++ b/src/features/messages/ChannelTimeline.tsx @@ -162,7 +162,10 @@ function Timeline({ element.clientHeight === previous.viewport && element.scrollTop < previous.offset + Math.min(0, element.scrollHeight - previous.height); - if (previous && follow.current && !movedUp) position.bottom = true; + // Cold estimates can briefly clamp a restored reader to the measured end. + // Keep that explicit reading intent until a gesture or navigation resets it. + if (anchor) position.bottom = false; + else if (previous && follow.current && !movedUp) position.bottom = true; savedPosition.current = position; follow.current = position.bottom; measuredPosition.current = { diff --git a/src/features/messages/virtua-compensation.test.mjs b/src/features/messages/virtua-compensation.test.mjs index 081bb31d..ace264b0 100644 --- a/src/features/messages/virtua-compensation.test.mjs +++ b/src/features/messages/virtua-compensation.test.mjs @@ -277,17 +277,33 @@ for (const [name, config, deferred] of [ }); } -it("defers new row registration but keeps measurement delivery synchronous", () => { +function duringResize(c, render) { + const stop = c.store.H(2, () => { + stop(); + render(); + }); + c.resize([{ target: c.viewport, contentRect: { height: 600 } }]); +} + +it("defers only registrations caused by resize delivery and keeps sizes synchronous", () => { const c = setup({ attach: false }); - const row = { offsetParent: c.viewport }; + const row = { + offsetParent: c.viewport, + ownerDocument: c.viewport.ownerDocument, + }; c.driver.P(row, 0); // Child registration can precede driver attachment. - expect(c.observed.size).toBe(0); + expect(c.observed.has(row)).toBe(true); c.driver.D({}, c.viewport); expect(c.observed.has(c.viewport)).toBe(true); - expect(c.observed.has(row)).toBe(false); + const sibling = { + offsetParent: c.viewport, + ownerDocument: c.viewport.ownerDocument, + }; + duringResize(c, () => c.driver.P(sibling, 1)); + expect(c.observed.has(sibling)).toBe(false); expect(c.frames.size).toBe(1); c.frame(); - expect(c.observed.has(row)).toBe(true); + expect(c.observed.has(sibling)).toBe(true); c.resize([ { target: c.viewport, contentRect: { height: 600 } }, { target: row, contentRect: { height: 50 } }, @@ -300,8 +316,14 @@ it("defers new row registration but keeps measurement delivery synchronous", () it("cancels unmounted registration and observes hidden and reassigned rows", () => { const c = setup(); - const rows = Array.from({ length: 3 }, () => ({ offsetParent: c.viewport })); - const release = rows.map((row, index) => c.driver.P(row, index)); + const rows = Array.from({ length: 3 }, () => ({ + offsetParent: c.viewport, + ownerDocument: c.viewport.ownerDocument, + })); + let release; + duringResize(c, () => { + release = rows.map((row, index) => c.driver.P(row, index)); + }); release[0](); rows[1].offsetParent = null; release[2](); @@ -321,13 +343,18 @@ it("cancels unmounted registration and observes hidden and reassigned rows", () it("cancels registrations on disposal and accepts fresh registrations after remount", () => { const c = setup(); - const row = { offsetParent: c.viewport }; - const release = c.driver.P(row, 0); + const row = { + offsetParent: c.viewport, + ownerDocument: c.viewport.ownerDocument, + }; + let release; + duringResize(c, () => { + release = c.driver.P(row, 0); + }); c.driver._(); expect(c.frames.size).toBe(0); c.frame(); expect(c.observed.size).toBe(0); - c.resize([{ target: row, contentRect: { height: 50 } }]); expect(c.store.u(1)).toBe(100); release(); c.driver.P(row, 0); @@ -339,14 +366,36 @@ it("cancels registrations on disposal and accepts fresh registrations after remo c.driver._(); }); -it("releases rows before attachment without creating or reviving an observer", () => { +it("releases immediately observed rows before attachment without reviving them", () => { const c = setup({ attach: false }); - const row = { offsetParent: c.viewport }; + const row = { + offsetParent: c.viewport, + ownerDocument: c.viewport.ownerDocument, + }; const release = c.driver.P(row, 0); + expect(c.observed.has(row)).toBe(true); expect(() => release()).not.toThrow(); + expect(c.observed.has(row)).toBe(false); c.driver._(); c.driver.D({}, c.viewport); c.frame(); expect(c.observed.has(row)).toBe(false); c.driver._(); }); + +it("restores ordinary registration timing if a resize subscriber throws", () => { + const c = setup(); + expect(() => + duringResize(c, () => { + throw new Error("render failed"); + }), + ).toThrow("render failed"); + const row = { + offsetParent: c.viewport, + ownerDocument: c.viewport.ownerDocument, + }; + c.driver.P(row, 0); + expect(c.observed.has(row)).toBe(true); + expect(c.frames.size).toBe(0); + c.driver._(); +}); From dfd28b512e52e9fc5a682a8785eaf30955f6611e Mon Sep 17 00:00:00 2001 From: Arjun Mahanti Date: Wed, 16 Sep 2026 09:57:20 -0400 Subject: [PATCH 5/5] Preserve settled reading anchors across cold restoration Signed-off-by: Arjun Mahanti --- .../messages/ChannelTimeline.test.tsx | 52 ++++++++++++-- src/features/messages/ChannelTimeline.tsx | 30 +++++--- tests/browser/buzz-links.spec.mjs | 70 +++++++++++++++---- 3 files changed, 127 insertions(+), 25 deletions(-) diff --git a/src/features/messages/ChannelTimeline.test.tsx b/src/features/messages/ChannelTimeline.test.tsx index 9978ebcb..d0932e18 100644 --- a/src/features/messages/ChannelTimeline.test.tsx +++ b/src/features/messages/ChannelTimeline.test.tsx @@ -587,6 +587,19 @@ it("captures the mounted message at cleanup and restores that anchor after resiz anchor: { id: "last", y: 42 }, }); }); +it("captures a reading anchor when visible rows mount after the last scroll event", () => { + const mounted: { id: string; y: number }[] = []; + const h = setup({ mounted }); + h.scroll(); + // Virtual rows commit after the scroll handler, without another scroll event. + mounted.push({ id: "last", y: 42 }); + h.unmount(); + expect(h.saved()).toEqual({ + offset: 2388, + bottom: false, + anchor: { id: "last", y: 42 }, + }); +}); it("resize-generated scroll retains the restored message when its paragraph no longer fits", () => { const mounted = [{ id: "last", y: 42 }]; const h = setup({ mounted }); @@ -784,6 +797,32 @@ it.each([false, true])( h.unmount(); }, ); +it.each([false, true])( + "initial measurement preserves bottom intent before input, with previous scroll=%s", + (previous) => { + const h = setup(); + if (previous) { + h.element.scrollTop = h.element.scrollHeight - h.element.clientHeight; + h.dispatchScroll(); + } + // WebKit may deliver an intermediate programmatic offset before the final + // end-scroll correction, even when no reader has touched the timeline. + h.element.scrollTop = 1281; + h.dispatchScroll(); + h.handle.scrollToIndex.mockClear(); + h.measureRows(); + expect(h.handle.scrollToIndex).toHaveBeenCalledExactlyOnceWith(1, { + align: "end", + }); + // The very first real gesture still takes ownership immediately. + h.scroll(); + h.handle.scrollToIndex.mockClear(); + h.measureRows(); + expect(h.handle.scrollToIndex).not.toHaveBeenCalled(); + h.unmount(); + expect(h.saved().bottom).toBe(false); + }, +); it("late measurements do not convert reading-anchor restoration to bottom follow", () => { const h = setup({ mounted: [{ id: "last", y: 42 }] }); h.scroll(); @@ -794,11 +833,16 @@ it("late measurements do not convert reading-anchor restoration to bottom follow expect(h.handle.scrollToIndex).not.toHaveBeenCalled(); h.unmount(); }); -it.each([false, true])( - "cold extent clamping preserves restored reading until a real bottom gesture=%s", - (gesture) => { +it.each([ + { gesture: false, anchor: { id: "last", y: 42 } }, + { gesture: true, anchor: { id: "last", y: 42 } }, + { gesture: false, anchor: undefined }, + { gesture: true, anchor: undefined }, +])( + "cold extent clamping preserves restored reading until a real bottom gesture: %j", + ({ gesture, anchor }) => { const h = setup({ - initial: { offset: 80851, bottom: false, anchor: { id: "last", y: 42 } }, + initial: { offset: 80851, bottom: false, anchor }, mounted: [{ id: "last", y: 42 }], }); // Cold geometry temporarily ends at the restored offset, then grows. diff --git a/src/features/messages/ChannelTimeline.tsx b/src/features/messages/ChannelTimeline.tsx index 7aea8fa4..aa6b893f 100644 --- a/src/features/messages/ChannelTimeline.tsx +++ b/src/features/messages/ChannelTimeline.tsx @@ -105,7 +105,9 @@ function Timeline({ readView(scope, `scroll:${channelId}`, null), ); const savedPosition = useRef(initialPosition); - const restoredAnchor = useRef(undefined); + const restoredReading = useRef<{ anchorId: string | undefined } | undefined>( + undefined, + ); const rows = useMemo(() => membershipRows(window.rows), [window.rows]); const profiles = useRowProfiles(queries.profiles, window.rows); const geometry = useMemo(() => geometryFor(queries.channels), [queries]); @@ -143,7 +145,7 @@ function Timeline({ (element: HTMLElement) => { // A delayed membership event can replace a group's rendered representative. // Keep the restored event anchored through that change until reader input. - const anchor = restoredAnchor.current; + const anchor = restoredReading.current?.anchorId; const renderedAnchor = anchor ? rows.find( (row) => @@ -164,7 +166,9 @@ function Timeline({ previous.offset + Math.min(0, element.scrollHeight - previous.height); // Cold estimates can briefly clamp a restored reader to the measured end. // Keep that explicit reading intent until a gesture or navigation resets it. - if (anchor) position.bottom = false; + if (restoredReading.current) position.bottom = false; + // Before input, cold row measurement is layout, not a change of intent. + else if (!userScrolled.current) position.bottom = follow.current; else if (previous && follow.current && !movedUp) position.bottom = true; savedPosition.current = position; follow.current = position.bottom; @@ -186,7 +190,7 @@ function Timeline({ if (!handle.current) return; intent.current++; follow.current = false; - restoredAnchor.current = undefined; + restoredReading.current = undefined; settled.current = false; handle.current.scrollToIndex(targetIndex, { align: "center" }); }, [targetIndex]); @@ -233,6 +237,13 @@ function Timeline({ observer.observe(element); return () => { olderDemand.current = false; + // A scroll event can precede Virtua mounting the visible rows. Capture the + // settled DOM before leaving so cold restoration has a message anchor. + if (settled.current) { + const position = positionAt(element, restoredReading.current?.anchorId); + if (position.anchor) + savedPosition.current = { ...position, bottom: follow.current }; + } settled.current = false; writeView(scope, `scroll:${channelId}`, savedPosition.current); observer.disconnect(); @@ -277,8 +288,10 @@ function Timeline({ row.membershipRows?.some((member) => member.id === anchor.id), ) : -1; + restoredReading.current = { + anchorId: index >= 0 ? rows[index]?.id : undefined, + }; if (anchor && index >= 0) { - restoredAnchor.current = rows[index]?.id; handle.current.scrollToIndex(index, { align: "start", offset: -anchor.y, @@ -350,7 +363,7 @@ function Timeline({ const frame = requestAnimationFrame(() => { if (!handle.current) return; follow.current = true; - restoredAnchor.current = undefined; + restoredReading.current = undefined; userScrolled.current = false; handle.current.scrollToIndex(index, { align: "end" }); revealed.current = revealMessageId; @@ -395,10 +408,11 @@ function Timeline({ loadNearTop(scroller.current, true); }, [loadNearTop]); const gesture = () => { - restoredAnchor.current = undefined; + restoredReading.current = undefined; intent.current++; - if (scroller.current) recordPosition(scroller.current); + if (!userScrolled.current) measuredPosition.current = null; userScrolled.current = true; + if (scroller.current) recordPosition(scroller.current); // At a restored top edge, input cannot move the DOM and emits no scroll. if (scroller.current && scroller.current.scrollTop <= 0) loadNearTop(scroller.current); diff --git a/tests/browser/buzz-links.spec.mjs b/tests/browser/buzz-links.spec.mjs index cf4319eb..40034d47 100644 --- a/tests/browser/buzz-links.spec.mjs +++ b/tests/browser/buzz-links.spec.mjs @@ -16,7 +16,6 @@ test("Buzz channel and message links render, reveal verified targets, and preser app, }) => { const history = app.histories.get("primary/alpha"); - app.relay.holdProfiles([history[0].pubkey]); await open(page, app); const target = history.find((row) => row.content === "Broadcast reply"); const href = `buzz://message?channel=alpha&id=${target.id}`; @@ -90,18 +89,6 @@ test("Buzz channel and message links render, reveal verified targets, and preser expect( await link.evaluate((element) => element.matches(":focus-visible")), ).toBe(true); - const focusedTrigger = await link.elementHandle(); - app.relay.releaseProfiles(); - await expect( - row.getByRole("button", { - name: "View Alice Fixture profile", - exact: true, - }), - ).toBeVisible(); - expect(await focusedTrigger.evaluate((element) => element.isConnected)).toBe( - true, - ); - await expect(link).toBeFocused(); await expect(preview).toBeVisible(); expect( app.report.brokerRequests.some(({ url }) => url.endsWith("/agent-library")), @@ -122,6 +109,63 @@ test("Buzz channel and message links render, reveal verified targets, and preser expect((await state(page)).entry.target.channelId).toBe("beta"); }); +test("a held profile update preserves the focused message-link trigger", async ({ + page, + app, +}) => { + const history = app.histories.get("primary/alpha"); + app.relay.holdProfiles([history[0].pubkey]); + let link; + let row; + let focusedTrigger; + try { + await open(page, app); + const target = history.find( + (message) => message.content === "Broadcast reply", + ); + const message = app.append( + "primary", + "alpha", + `Open .`, + true, + false, + ); + row = page.locator( + `[data-channel-timeline] [data-message-id="${message.id}"]`, + ); + link = row.getByRole("link", { name: "Alpha", exact: true }); + await expect(link).toBeVisible(); + await page.keyboard.press("Tab"); + await link.focus(); + await expect(link).toBeFocused(); + await expect + .poll(() => app.report.profileHolds.some((hold) => hold.pending)) + .toBe(true); + await expect( + row.getByRole("button", { + name: `View ${message.pubkey.slice(0, 10)} profile`, + exact: true, + }), + ).toBeVisible(); + focusedTrigger = await link.elementHandle(); + } finally { + app.relay.releaseProfiles(); + } + await expect( + row.getByRole("button", { + name: "View Alice Fixture profile", + exact: true, + }), + ).toBeVisible(); + expect(await focusedTrigger.evaluate((element) => element.isConnected)).toBe( + true, + ); + await expect(link).toBeFocused(); + await expect( + page.getByLabel("Message preview", { exact: true }), + ).toBeVisible(); +}); + test("activating a panel from a linked thread retires the navigation-owned thread instead of splitting the rail", async ({ page, app,