Telegram-iOS/submodules/TelegramUI/Components/Chat
isaac a731f8bdc0 Implement textDate autoformatter for InstantPage V2 rich bubbles
Render RichText.textDate (API constructor textDate(flags, text, date)) as a
locale/timezone-correct, relative-aware, tappable date inside V2 rich-message
bubbles, reusing the existing stringForEntityFormattedDate autoformatter.

- Model: add RichText.textDate(text📅format:) with Postbox coding,
  FlatBuffers schema (RichText.fbs; flatc regenerates), Equatable and plainText;
  parse flags->DateTimeFormat? at the API boundary (flags==0 => nil, matching
  the messageEntityFormattedDate convention) with a symmetric apiRichText()
  round-trip. The new case is handled in every exhaustive RichText switch
  (SyncCore, ApiUtils, InstantPageTextItem, InstantPageAnchorPath,
  InstantPagePreviewText, BrowserReadability, BrowserMarkdown).
- Render: attributedStringForRichText gains an optional formatDate closure;
  the V2 layout builds it from the message's strings/dateTimeFormat and threads
  it to every text-building call site, formatting the timestamp and tagging the
  run with TelegramTextAttributes.Date.
- Tappable: the Date attribute is added to linkSelectionRects hit-testing and
  mapped in the rich bubble's entityTapContent to the existing .date tap action
  (opens the date context menu).
- Live update: the V2 layout accumulates a page-wide formattedDateUpdatePeriod
  (>=10s) for relative dates; the rich bubble schedules a refresh timer on it,
  recreating it only when the period changes. The currentPageLayout cache is
  bypassed for relative-date pages so the timer-driven relayout actually
  re-formats the date.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 13:45:48 +02:00
..
AccessoryPanelNode
ChatAgeRestrictionAlertController Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatAvatarNavigationNode Various fixes 2026-04-23 01:26:13 +02:00
ChatBotInfoItem Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
ChatButtonKeyboardInputNode Various improvements 2026-05-28 16:50:05 +02:00
ChatChannelSubscriberInputPanelNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatContextResultPeekContent Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
ChatEmptyNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatHistoryEntry Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatHistorySearchContainerNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatInlineSearchResultsListComponent Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatInputAccessoryPanel
ChatInputAutocompletePanel
ChatInputContextPanelNode
ChatInputMessageAccessoryPanel Various fixes 2026-04-27 03:07:38 +02:00
ChatInputPanelNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatInputTextNode Various improvements 2026-05-28 16:50:05 +02:00
ChatInstantVideoMessageDurationNode
ChatLoadingNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMediaInputStickerGridItem Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageActionBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageActionButtonsNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageAnimatedStickerItemNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageAttachedContentButtonNode
ChatMessageAttachedContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageBirthdateSuggestionContentNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatMessageBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageBubbleItemNode InstantPage V2: render server-sent thinking blocks 2026-05-30 18:47:03 +02:00
ChatMessageCallBubbleContentNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageCommentFooterContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageContactBubbleContentNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageDateAndStatusNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageDeliveryFailedNode
ChatMessageDisableCopyProtectionBubbleContentNode Update localization 2026-02-24 19:33:42 +04:00
ChatMessageEventLogPreviousDescriptionContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageEventLogPreviousLinkContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageEventLogPreviousMessageContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageFactCheckBubbleContentNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageFileBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageForwardInfoNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageGameBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageGiftBubbleContentNode Improve animations 2026-04-30 12:56:55 +04:00
ChatMessageGiftOfferBubbleContentNode Various fixes 2025-12-11 21:32:44 +04:00
ChatMessageGiveawayBubbleContentNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageInstantVideoBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageInstantVideoItemNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageInteractiveFileNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageInteractiveInstantVideoNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageInteractiveMediaNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageInvoiceBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageItem Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageItemCommon Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageItemImpl Various improvements 2026-05-28 16:50:05 +02:00
ChatMessageItemView Various improvements 2026-05-28 16:50:05 +02:00
ChatMessageJoinedChannelBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageMapBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageMediaBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageNotificationItem Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessagePaymentAlertController Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
ChatMessagePollBubbleContentNode Various improvements 2026-05-28 16:50:05 +02:00
ChatMessageProfilePhotoSuggestionContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageReactionsFooterContentNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageReplyInfoNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageRestrictedBubbleContentNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageRichDataBubbleContentNode Implement textDate autoformatter for InstantPage V2 rich bubbles 2026-06-04 13:45:48 +02:00
ChatMessageSelectionInputPanelNode Various improvements 2026-06-04 01:44:36 +02:00
ChatMessageSelectionNode
ChatMessageShareButton Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageStarsMediaInfoNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageStickerItemNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageStoryMentionContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageSuggestedPostInfoNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatMessageSwipeToReplyNode
ChatMessageTextBubbleContentNode InstantPage V2: render server-sent thinking blocks 2026-05-30 18:47:03 +02:00
ChatMessageThreadInfoNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageTodoBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageTransitionNode
ChatMessageUnlockMediaNode Postbox refactor waves 138–276: 168-commit squash 2026-05-05 00:44:27 +02:00
ChatMessageUnsupportedBubbleContentNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatMessageWallpaperBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatMessageWebpageBubbleContentNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatNavigationButton
ChatNewThreadInfoItem Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatOverscrollControl Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatPanelsComponent Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatQrCodeScreen Various improvements 2026-05-28 16:50:05 +02:00
ChatRankInfoScreen Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
ChatRecentActionsController Various improvements 2026-06-04 01:44:36 +02:00
ChatRecordingPreviewInputPanelNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatRecordingViewOnceButtonNode Glass 2026-01-25 00:31:18 +08:00
ChatSearchNavigationContentNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatSendAsContextMenu Various improvements 2026-05-28 16:50:05 +02:00
ChatSendAudioMessageContextPreview Various improvements 2026-05-28 16:50:05 +02:00
ChatSendStarsScreen Postbox -> TelegramEngine waves 37-43 + wave 44 design/plan (squashed) 2026-04-24 23:19:43 +04:00
ChatShareMessageTagView Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ChatSideTopicsPanel Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
ChatSwipeToReplyRecognizer
ChatTextInputActionButtonsNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ChatTextInputAudioRecordingCancelIndicator
ChatTextInputAudioRecordingTimeNode
ChatTextInputPanelNode Various improvements 2026-06-04 01:44:36 +02:00
ChatTextInputSlowmodePlaceholderNode
ChatUserInfoItem Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
EditableTokenListNode Various improvements 2026-05-28 16:50:05 +02:00
FactCheckAlertController Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ForwardAccessoryPanelNode Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
InstantVideoRadialStatusNode
ManagedDiceAnimationNode Postbox -> TelegramEngine waves 27-36 2026-04-24 11:24:13 +04:00
MergedAvatarsNode Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
MessageHaptics
MessageInlineBlockBackgroundView Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
MessageQuoteComponent
PollBubbleTimerNode [WIP] Polls 2026-03-17 11:12:58 +01:00
QuickShareScreen Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00
ReplyAccessoryPanelNode Postbox -> TelegramEngine waves 107-137 (squashed) 2026-05-03 10:28:50 +02:00
SavedTagNameAlertController Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
ShimmeringLinkNode Various improvements 2026-02-19 21:53:26 +04:00
SuggestPostAccessoryPanelNode Postbox -> TelegramEngine waves 11-14: stateManager collapse + BUILD-dep sweep 2026-04-20 20:26:58 +02:00
TopMessageReactions Merge commit 'c64653ed37' 2026-05-14 12:45:26 +02:00