Skip to content

Commit 6804ed6

Browse files
authored
docs: track latest react v14 action and error changes (#3063)
### 🎯 Goal Keep the React v14 tracker files aligned with the latest breaking changes landed on `master`. ### 🛠 Implementation details - update the audited head and future mining starting point to `9877da51` - add the newly confirmed breaking changes for the explicit dropdown toggle, failed-message handling, and own-message mark-unread restriction - update the docs plan with the reopened docs fallout and mark those items resolved after the public docs pass - keep the tracker state in sync with the accompanying docs-content PR ### 🎨 UI Changes N/A
1 parent 9877da5 commit 6804ed6

2 files changed

Lines changed: 249 additions & 95 deletions

File tree

ai-docs/breaking-changes.md

Lines changed: 115 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# React v14 Breaking Changes
22

3-
Last updated: 2026-03-23
3+
Last updated: 2026-03-25
44

55
## Scope
66

@@ -13,8 +13,8 @@ This file tracks confirmed v13 to v14 breaking changes for `stream-chat-react`.
1313
## Audit Reference
1414

1515
- Baseline tag: `v13.14.2`
16-
- Current audited SDK head: `d251338327cdfe72042894c62c523bd9164c104f` (`d2513383`, `2026-03-23`, `fix: rename ChannelListMessenger to ChannelListUI (#3036)`)
17-
- Future mining starting point: diff `d251338327cdfe72042894c62c523bd9164c104f..HEAD` first, then compare any newly confirmed changes back to the original v13 baseline before adding them here
16+
- Current audited SDK head: `9877da511183c5149959583bc4f11d7aa616f87f` (`9877da51`, `2026-03-25`, `chore: migrate test suite from JavaScript to TypeScript (#3057)`)
17+
- Future mining starting point: diff `9877da511183c5149959583bc4f11d7aa616f87f..HEAD` first, then compare any newly confirmed changes back to the original v13 baseline before adding them here
1818

1919
Only confirmed items should move from this file into the migration guide.
2020

@@ -811,25 +811,33 @@ Only confirmed items should move from this file into the migration guide.
811811
- imports using the removed helper utilities or standalone status/input icons no longer compile
812812
- low-level customization patterns built on those exports need to move to the new `Icons` set, newer helper names, or higher-level components
813813
- Confirmed removed exports:
814+
- `ActionsIcon`
814815
- `CloseIcon`
815816
- `showMessageActionsBox`
816817
- `shouldRenderMessageActions`
817818
- `isOnlyEmojis`
819+
- `ReactionIcon`
818820
- `RetryIcon`
819821
- `DownloadIcon`
820822
- `LinkIcon`
821823
- `SendIcon`
822824
- `MicIcon`
823825
- `MessageSentIcon`
824826
- `MessageDeliveredIcon`
827+
- `ThreadIcon`
828+
- `MessageErrorIcon`
825829
- `attachmentTypeIconMap`
826830
- Old API evidence:
831+
- `v13.14.2:src/components/Message/icons.tsx:7` exported `ActionsIcon`
827832
- `v13.14.2:src/components/MessageInput/icons.tsx:67` exported `CloseIcon`
828833
- `v13.14.2:src/components/Message/utils.tsx:241` exported `showMessageActionsBox`
829834
- `v13.14.2:src/components/Message/utils.tsx:246` exported `shouldRenderMessageActions`
830835
- `v13.14.2:src/components/Message/utils.tsx:483` exported `isOnlyEmojis`
836+
- `v13.14.2:src/components/Message/icons.tsx:22` exported `ReactionIcon`
831837
- `v13.14.2:src/components/MessageInput/icons.tsx:83` through `:149` exported `RetryIcon`, `DownloadIcon`, `LinkIcon`, `SendIcon`, and `MicIcon`
838+
- `v13.14.2:src/components/Message/icons.tsx:37` exported `ThreadIcon`
832839
- `v13.14.2:src/components/Message/icons.tsx:77` and `:92` exported `MessageSentIcon` and `MessageDeliveredIcon`
840+
- `v13.14.2:src/components/Message/icons.tsx:108` exported `MessageErrorIcon`
833841
- `v13.14.2:src/components/Threads/ThreadList/ThreadListItemUI.tsx:25` exported `attachmentTypeIconMap`
834842
- New API evidence:
835843
- `src/components/Message/utils.tsx:431` exports `countEmojis`
@@ -840,7 +848,7 @@ Only confirmed items should move from this file into the migration guide.
840848
- Replacement:
841849
- move emoji-only checks to `countEmojis()` / `messageTextHasEmojisOnly()`
842850
- stop relying on `showMessageActionsBox()` / `shouldRenderMessageActions()` and instead customize the new `MessageActions` action-set flow
843-
- replace direct icon imports with the public `Icons` components or with higher-level components like `MessageStatus`, `SendButton`, and thread preview components
851+
- replace direct icon imports with the public `Icons` components or with higher-level components like `MessageStatus`, `SendButton`, `MessageActions`, and thread preview components
844852
- if you used `attachmentTypeIconMap`, inline your own map or switch to the new thread preview components
845853
- Evidence:
846854
- current `MessageComposer/index.ts` and `Message/index.ts` still re-export their `icons.tsx` files, but the removed icon symbols are no longer present there
@@ -1037,14 +1045,17 @@ Only confirmed items should move from this file into the migration guide.
10371045
- `src/components/MessageComposer/SendToChannelCheckbox.tsx:25` through `:50` now use `str-chat__send-to-channel-checkbox__container--checked`, explicit input classes, and a custom visual/checkmark wrapper
10381046
- `src/components/Loading/LoadingChannels.tsx:3` through `:25` now render loading placeholders with `str-chat__channel-preview-container` / `str-chat__channel-preview--loading`
10391047
- `src/components/MessageComposer/WithDragAndDropUpload.tsx:134` through `:165` now add `str-chat__dropzone-root` and `str-chat__dropzone-container__content` around the default drag-and-drop overlay
1048+
- `src/components/Message/MessageUI.tsx:275` through `:277` now render `str-chat__message-error-indicator` with the shared `ErrorBadge` instead of the removed `str-chat__message-error-icon` wrapper
10401049
- `src/styling/index.scss:1` now assembles a new styling entrypoint, and `src/styling/variables.css:5` introduces a tokenized variable layer under `.str-chat`
10411050
- Replacement:
10421051
- audit custom CSS selectors against current rendered markup before upgrading
10431052
- prefer current component variables and current selectors over legacy internal wrappers
10441053
- re-test any layout code that styled the old header, sidebar/list, or message-input internals directly
10451054
- update selector-based tests that depended on `str-chat__channel-list-messenger-react__main`, old channel-preview DOM/action buttons, `aria-selected` sidebar items, or the older loading skeleton DOM
1055+
- update any selector-based styling or tests that relied on `str-chat__message-error-icon`; the default error badge now renders under `str-chat__message-error-indicator`
10461056
- Evidence:
10471057
- the class structure changed across header, composer, avatar, channel-preview, sidebar/list, and loading surfaces
1058+
- the message-send error badge also switched from the removed `MessageErrorIcon` wrapper class to the new `str-chat__message-error-indicator`
10481059
- current docs still contain stale selectors like `.str-chat__header-hamburger`, `.str-chat__channel-list-messenger-react__main`, and `aria-selected` thread-item examples
10491060
- v14 now ships a centralized styling/token layer alongside those markup changes
10501061
- Docs impact:
@@ -1808,6 +1819,102 @@ Only confirmed items should move from this file into the migration guide.
18081819
- `docs/data/docs/chat-sdk/react/v14/02-ui-components/04-channel/05-component_context.md`
18091820
- Example needed: yes
18101821

1822+
### BC-053: `MessageActions` and `ChannelListItemActionButtons` now require an explicit quick dropdown-toggle item
1823+
1824+
- Status: confirmed
1825+
- Area: action-set customization
1826+
- User impact:
1827+
- custom `messageActionSet` arrays that do not include the new dropdown-toggle entry can silently lose the menu trigger even when dropdown actions are still present
1828+
- custom `channelActionSet` arrays that do not include the new dropdown-toggle entry can silently lose the channel-row action menu trigger
1829+
- TypeScript code that assumed action placements were only `'quick' | 'dropdown'` no longer type-checks against the current public union
1830+
- Old API:
1831+
- `d2513383:src/components/MessageActions/MessageActions.tsx:23` through `:35` typed `MessageActionSetItem` as only `quick` or `dropdown`
1832+
- `d2513383:src/components/MessageActions/MessageActions.tsx:102` through `:135` rendered the message-actions toggle button internally whenever dropdown actions were present
1833+
- `d2513383:src/components/ChannelListItem/ChannelListItemActionButtons.tsx:51` through `:85` rendered the channel-row toggle button internally whenever dropdown actions were present
1834+
- New API:
1835+
- `src/components/MessageActions/MessageActions.tsx:31` through `:39` add `QuickDropdownToggleActionSetItem` with `placement: 'quick-dropdown-toggle'`
1836+
- `src/components/MessageActions/MessageActions.tsx:71` through `:72` split the action set into `dropdownActionSet`, `quickActionSet`, and `quickDropdownToggleAction`
1837+
- `src/components/MessageActions/MessageActions.tsx:103` through `:125` render the message-actions menu only when a `quickDropdownToggleAction` is present
1838+
- `src/components/ChannelListItem/ChannelListItemActionButtons.tsx:30` through `:55` and `:85` through `:103` follow the same explicit-toggle model for `channelActionSet`
1839+
- `src/components/MessageActions/MessageActions.defaults.tsx` and `src/components/ChannelListItem/ChannelListItemActionButtons.defaults.tsx` now include a default `quick-dropdown-toggle` item
1840+
- Replacement:
1841+
- when you customize `messageActionSet`, start from `defaultMessageActionSet` unless you are intentionally rebuilding the whole action surface
1842+
- if you build a fully custom message action set, include a `quick-dropdown-toggle` item whenever you still want dropdown actions to be reachable
1843+
- when you customize `channelActionSet`, preserve or replace the default `quick-dropdown-toggle` item explicitly instead of assuming the SDK will inject the toggle button for you
1844+
- Evidence:
1845+
- commit `30ddab0f feat: quick dropdown toggle and cleanup (#3054)` added the new `quick-dropdown-toggle` placement, removed the hardcoded toggle buttons, and moved both `MessageActions` and `ChannelListItemActionButtons` to the explicit-toggle model
1846+
- current source no longer renders dropdown toggles unconditionally when dropdown actions exist
1847+
- Docs impact:
1848+
- migration guide
1849+
- `docs/data/docs/chat-sdk/react/v14/05-experimental-features/01-message-actions.md`
1850+
- `docs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/04-message_actions.md`
1851+
- `docs/data/docs/chat-sdk/react/v14/04-guides/11-blocking-users.md`
1852+
- Example needed: yes
1853+
1854+
### BC-054: message-send error UI and delete handling changed
1855+
1856+
- Status: confirmed
1857+
- Area: failed-message handling
1858+
- User impact:
1859+
- imports using `MessageErrorText` no longer compile
1860+
- imports using `MessageErrorIcon` no longer compile
1861+
- custom message UIs or AI-message examples that still render the removed error icon are stale
1862+
- `handleDelete()` now rethrows deletion failures after notifying, so custom delete buttons can no longer assume the handler always swallows errors
1863+
- deleting unsent or network-failed messages now removes them locally instead of routing through the server delete path
1864+
- Old API:
1865+
- `d2513383:src/components/Message/MessageText.tsx:8` imported `MessageErrorText`
1866+
- `d2513383:src/components/Message/MessageText.tsx:72` rendered `<MessageErrorText message={message} />`
1867+
- `d2513383:src/components/Message/hooks/useDeleteHandler.ts:25` through `:39` only attempted a server delete and swallowed caught errors after notifying
1868+
- `v13.14.2:src/components/Message/icons.tsx:108` exported `MessageErrorIcon`
1869+
- New API:
1870+
- current source has no `src/components/Message/MessageErrorText.tsx`
1871+
- `src/components/Message/MessageText.tsx:57` through `:78` render message text without a separate `MessageErrorText` child
1872+
- `src/components/Message/MessageUI.tsx:275` through `:277` render the default failed-send badge through `str-chat__message-error-indicator` and the shared `ErrorBadge`
1873+
- `src/components/Message/hooks/useDeleteHandler.ts:31` through `:34` remove unsent and network-failed messages locally
1874+
- `src/components/Message/hooks/useDeleteHandler.ts:43` through `:48` notify and then rethrow on delete failures
1875+
- Replacement:
1876+
- stop importing `MessageErrorText` or `MessageErrorIcon`
1877+
- rebuild custom failed-send UI around the current error badge or explicit app-owned markup
1878+
- wrap custom `handleDelete()` calls in `try/catch` if your UI needs to recover from server-side delete failures
1879+
- expect `handleDelete()` to remove unsent and network-failed messages locally without issuing a delete request
1880+
- Evidence:
1881+
- commit `e0207cd6 fix: adjust message UI for network error when sending a message (#3042)` removed `MessageErrorText`, changed failed-message deletion semantics, and rethrew delete failures
1882+
- commit `f4caa0eb feat: redesign message actions icons and message error badge (#3050)` removed `MessageErrorIcon` and switched the default failed-send badge to the new shared indicator
1883+
- Docs impact:
1884+
- migration guide
1885+
- `docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/02-message_context.md`
1886+
- `docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/03-message_bounce_context.md`
1887+
- `docs/data/docs/chat-sdk/react/v14/02-ui-components/08-message/04-message_hooks.md`
1888+
- `docs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/01-message_ui.md`
1889+
- `docs/data/docs/chat-sdk/react/v14/04-guides/16-ai-integrations/02-chat-sdk-integration.md`
1890+
- Example needed: yes
1891+
1892+
### BC-055: your own messages can no longer be marked unread
1893+
1894+
- Status: confirmed
1895+
- Area: read-state and message actions
1896+
- User impact:
1897+
- the default `markUnread` action is no longer available on your own messages, even when the channel has the required `read-events` capability
1898+
- custom docs/examples that present `markUnread` as a generic built-in message action are now incomplete
1899+
- custom action-set filters that only remove `markUnread` by type can miss that the SDK base filter already removes it for own messages
1900+
- Old API:
1901+
- `d2513383:src/components/Message/hooks/useUserRole.ts:51` allowed `canMarkUnread` whenever `channelCapabilities['read-events']` was true
1902+
- New API:
1903+
- `src/components/Message/hooks/useUserRole.ts:51` allows `canMarkUnread` only when the message is not your own and the channel has `read-events`
1904+
- Replacement:
1905+
- do not assume `markUnread` will be available for your own messages in custom `MessageActions` UIs
1906+
- if you document or filter built-in actions, note that `markUnread` is limited to foreign messages and the required capability
1907+
- keep the SDK base action-set filter enabled unless you are intentionally re-implementing the same guardrails yourself
1908+
- Evidence:
1909+
- commit `fe05b622 feat: do not allow to mark own messages unread (#3043)` changed `canMarkUnread` from a capability-only check to `!isMyMessage && channelCapabilities['read-events']`
1910+
- current `useUserRole()` and the default `MessageActions` filter no longer expose `markUnread` for own messages
1911+
- Docs impact:
1912+
- migration guide
1913+
- `docs/data/docs/chat-sdk/react/v14/05-experimental-features/01-message-actions.md`
1914+
- `docs/data/docs/chat-sdk/react/v14/03-ui-cookbook/04-message/04-message_actions.md`
1915+
- `docs/data/docs/chat-sdk/react/v14/04-guides/05-channel_read_state.md`
1916+
- Example needed: yes
1917+
18111918
## Likely
18121919

18131920
- None yet
@@ -1822,6 +1929,10 @@ Only confirmed items should move from this file into the migration guide.
18221929
- `channelActionSet` introduction (`199797ed`): investigated; this adds a new customization surface for channel actions, but it does not remove or rename the earlier public v13 APIs. Track it as additive docs work, not a migration bucket.
18231930
- poll UI polish after the initial poll redesign (`e0659f3f`, `33fed1e4`, `e75ca3ac`, `ca11f908`, `885b7a64`, `c364b0b9`): investigated; the follow-up commits moved buttons, removed a tooltip, and adjusted prompt composition, but they did not introduce a new public export/prop removal beyond the existing poll bucket.
18241931
- smooth message-list scrolling (`cdf35d29`): investigated; this changes default behavior, but there is no new public prop, export, or override-key removal to track as a separate migration item.
1932+
- `useNotificationTarget()` / `useChatViewContext()` softening (`38b278e0`): investigated; `useNotificationTarget()` can now return `undefined`, and `useChatViewContext()` warns instead of throwing outside the provider, but this is runtime hardening rather than a public v13-to-v14 migration item.
1933+
- composer clear-on-unmount (`f2a79ab1`): investigated; `TextareaComposer` now clears composer state on unmount, but there is no removed export, renamed prop, or new override-key migration to track separately.
1934+
- shared attachment preview gallery (`f05f47d7`): investigated; `AttachmentPreviewList` now shares gallery preview behavior across attachments, but this is current UI behavior rather than a removed or renamed public API.
1935+
- voice-message deleted notification (`9982c45a`): investigated; this adds a new default notification string/behavior for deleted voice recordings, but it does not remove or rename the existing public attachment APIs.
18251936

18261937
## Notes For Migration Guide Drafting
18271938

0 commit comments

Comments
 (0)