ux: reply null state, location error feedback, retry send, reaction keyboard nav

- Reply: distinguish loading (placeholder) from not-found (null) — show
  "Original message not available" instead of a stuck loading bar
- RoomInput: geolocation errors now surface inline (denied / timed out /
  unsupported); location button shows Spinner during fetch and is disabled
- Message menu: Retry Send + Cancel Message items appear when a message
  is in NOT_SENT or CANCELLED state, calling mx.resendEvent / cancelPendingEvent
- ReactionViewer: sidebar gains role=listbox / role=option and ArrowUp/Down
  keyboard navigation between reactions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 00:02:19 -04:00
parent 97b335773b
commit d58c445d74
4 changed files with 115 additions and 20 deletions
+9 -5
View File
@@ -118,11 +118,7 @@ export const Reply = as<'div', ReplyProps>(
data-event-id={replyEventId}
onClick={onClick}
>
{replyEvent !== undefined ? (
<Text size="T300" truncate>
{badEncryption ? <MessageBadEncryptedContent /> : bodyJSX}
</Text>
) : (
{replyEvent === undefined ? (
<LinePlaceholder
style={{
backgroundColor: color.SurfaceVariant.ContainerActive,
@@ -130,6 +126,14 @@ export const Reply = as<'div', ReplyProps>(
maxWidth: '100%',
}}
/>
) : replyEvent === null ? (
<Text size="T300" truncate style={{ opacity: 0.5 }}>
<i>Original message not available</i>
</Text>
) : (
<Text size="T300" truncate>
{badEncryption ? <MessageBadEncryptedContent /> : bodyJSX}
</Text>
)}
</ReplyLayout>
</Box>