Rich messages: "Show more" to load the full page for partial InstantPages

Server-sent rich messages can arrive partial (RichMessage isPartial ->
instantPage.isComplete == false). The bubble renders the partial page with
an inline "Show more" link; tapping it fetches the full page once and
expands in place.

- RichTextMessageAttribute keeps the partial instantPage and gains an
  optional fullInstantPage, filled by engine.messages.requestFullRichText
  via transaction.updateMessage. The seed-config merge preserves a fetched
  fullInstantPage across later server updates.
- ChatMessageRichDataBubbleContentNode: node-local, per-message expand
  state (collapsed on every fresh display, even when fullInstantPage is
  already cached); renders (expanded ? fullInstantPage : nil) ?? instantPage;
  gates the link on !expanded && !isComplete (+ not streaming, Cloud-only,
  not preview/messageOptions); expand state threaded through both layout
  caches; shimmer while fetching (instant when cached); bubble grows
  downward on expand via setInvertOffsetDirection.
- New localized string Chat.RichText.ShowMore; docs in
  docs/instantpage-richtext.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
isaac 2026-06-04 20:18:15 +02:00
parent ef9c1def4e
commit dce6a8bef7
7 changed files with 282 additions and 32 deletions

View file

@ -8297,6 +8297,7 @@ Sorry for the inconvenience.";
"Chat.EmptyTopicPlaceholder.Text" = "Send the first message to\nstart this topic.";
"Chat.Message.TopicAuthorBadge" = "Topic Author";
"Chat.RichText.ShowMore" = "Show more";
"Chat.PanelRestartTopic" = "Restart Topic";
"Chat.PanelTopicClosedText" = "The topic is closed by admin";