You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
Copy file name to clipboardExpand all lines: ai-docs/breaking-changes.md
+115-4Lines changed: 115 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# React v14 Breaking Changes
2
2
3
-
Last updated: 2026-03-23
3
+
Last updated: 2026-03-25
4
4
5
5
## Scope
6
6
@@ -13,8 +13,8 @@ This file tracks confirmed v13 to v14 breaking changes for `stream-chat-react`.
13
13
## Audit Reference
14
14
15
15
- 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
18
18
19
19
Only confirmed items should move from this file into the migration guide.
20
20
@@ -811,25 +811,33 @@ Only confirmed items should move from this file into the migration guide.
811
811
- imports using the removed helper utilities or standalone status/input icons no longer compile
812
812
- low-level customization patterns built on those exports need to move to the new `Icons` set, newer helper names, or higher-level components
@@ -840,7 +848,7 @@ Only confirmed items should move from this file into the migration guide.
840
848
- Replacement:
841
849
- move emoji-only checks to `countEmojis()` / `messageTextHasEmojisOnly()`
842
850
- 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
844
852
- if you used `attachmentTypeIconMap`, inline your own map or switch to the new thread preview components
845
853
- Evidence:
846
854
- 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.
1037
1045
-`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
1038
1046
-`src/components/Loading/LoadingChannels.tsx:3` through `:25` now render loading placeholders with `str-chat__channel-preview-container` / `str-chat__channel-preview--loading`
1039
1047
-`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
1040
1049
-`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`
1041
1050
- Replacement:
1042
1051
- audit custom CSS selectors against current rendered markup before upgrading
1043
1052
- prefer current component variables and current selectors over legacy internal wrappers
1044
1053
- re-test any layout code that styled the old header, sidebar/list, or message-input internals directly
1045
1054
- 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`
1046
1056
- Evidence:
1047
1057
- 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`
1048
1059
- current docs still contain stale selectors like `.str-chat__header-hamburger`, `.str-chat__channel-list-messenger-react__main`, and `aria-selected` thread-item examples
1049
1060
- v14 now ships a centralized styling/token layer alongside those markup changes
1050
1061
- Docs impact:
@@ -1808,6 +1819,102 @@ Only confirmed items should move from this file into the migration guide.
### 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
-`d2513383:src/components/Message/hooks/useDeleteHandler.ts:25` through `:39` only attempted a server delete and swallowed caught errors after notifying
- 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
### 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
@@ -1822,6 +1929,10 @@ Only confirmed items should move from this file into the migration guide.
1822
1929
-`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.
1823
1930
- 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.
1824
1931
- 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.
0 commit comments