Skip to content

feat: use network and WS connection observer services from LLC - #3281

Merged
MartinCupela merged 14 commits into
release-v15from
feat/network-connection-observer
Sep 18, 2026
Merged

MartinCupela merged 14 commits into
release-v15from
feat/network-connection-observer

Conversation

@MartinCupela

@MartinCupela MartinCupela commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Depends on GetStream/stream-chat-js#1859

🎯 Goal

The offline banner said "you're offline" when the user's internet was fine.

It rendered off WebSocket health, and a socket dies for reasons that have nothing to do with the
user's network — the server closes it, an auth token expires, a keep-alive times out. On good
Wi-Fi, the app still blamed the network.

The SDK had no way to know better: it couldn't tell whether the device had a network, because
nothing told it. GetStream/stream-chat-js#1859
adds that missing signal — the device's network as a fact separate from the socket. This is the
React half: use it, and fix the things that were wrong once the two facts are told apart.

⚠️ Depends on a stream-chat release containing that work. The peer range moves to
^10.0.0-rc.12 in this PR. That release has to be published before this merges.

🛠 Implementation details

The banner now picks its wording from both facts. Network definitely down → "Waiting for
network…". Network up or unknown and socket down → "Reconnecting…". One banner throughout,
replaced rather than stacked when the reason changes. Deciding which of those to show is a copy
decision, not a fact about connectivity, which is why the client publishes no combined status and
the choice is made here, in the component that renders the copy.

It also reads the current state on mount. It only reacted to transitions before, so a client that
was already offline showed nothing until something changed.

Two hooks, one per fact, thin wrappers over useStateStore, exported from the package:

const { isOnline } = useNetworkConnectionState() ?? {};   // the device's network
const { isHealthy } = useWSConnectionState() ?? {};       // this client's socket

The field names differ because the guarantees differ. isHealthy is always a boolean — a socket
always has a state. isOnline is boolean | undefined, where undefined means no platform
reporter has reported yet, which is the normal state on React Native until one is installed. Test
it with === false; !isOnline also fires when the answer is unknown, which would show a
permanent offline banner.

There is no third hook combining them, for the reason above.
useNetworkConnectionStateSelector is there for components that only want one field and shouldn't
re-render on the others.

Connectivity is read from stores, not events. connection.changed no longer exists in the LLC:
the socket's status lives in client.wsConnection.state and the device's in
client.networkConnection.state, each written on every transition. Every consumer in this package
subscribes to whichever store answers its question, so there is no longer a single event that two
different facts have to share.

The banner's hold is now a client setting. The LLC used to delay its connectivity event by five
seconds; that hold moved here, and its length comes from
client.wsConnection.config.offlineNotificationDisplayDelayMs (5s default) so every UI SDK shares
one value. A drop that resolves inside the window publishes nothing at all.

Fixed: open channels were reloaded twice per reconnect. ConnectionRecoveryManager reloads
every active channel and then dispatches connection.recovered; Channel handled that event by
reloading again, and it marks its channel active while mounted. Two full watch() requests per
open channel, measured. The reload now happens once, in the client — Channel's own handler and
its subscription are gone.

Fixed: the banner vanished on a cold offline start. Streami18n.init() is async and t
changes identity when it resolves. Dismissal was part of the subscription effect's cleanup, so a
socket dropping inside that window published the notification and then had it removed — no banner
on an offline app launch or behind a captive portal. Dismissal is now scoped to the mount, where
it belongs.

Removed a dead online ref in Channel. Written on every connectivity event, read by nothing
since the v15 state migration.

Added a dev panel to the vite example, behind a sidebar toggle next to theme and RTL. Two
toggles that drive the network and the socket independently, because DevTools' "Offline" checkbox
takes down both at once — which is the one combination that always worked. The socket toggle writes
the status store and parks the live connection id while it is "down", handing the same id back on
the way up, so the client's recovery replay after the simulated reconnect uses a real id rather
than a fabricated one. It found a real regression in the LLC during review.

🎨 UI Changes

Screenshots needed — I can't produce them. What to capture:

  • The new "Reconnecting…" banner: with the app connected, drop the socket only (the dev panel's
    socket toggle, or client.wsConnection.connection.ws.close() in the console). Previously this
    said "Waiting for network…".
  • The unchanged "Waiting for network…" banner: the dev panel's network toggle, or DevTools →
    Offline.
  • The dev panel itself, with its sidebar toggle.

Behaviour changes for integrators

No API is removed from this package, so nothing here is a BREAKING CHANGE: for
stream-chat-react itself. Five things are worth knowing, and the first two arrive from the LLC.

  • The peer range moves to stream-chat@^10.0.0-rc.12. That release carries its own breaking
    changes — see GetStream/stream-chat-js#1859
    for the full list.
  • connection.changed no longer exists. If you listened for it yourself — to render your own
    banner, to trigger a refetch — subscribe to client.wsConnection.state or
    client.networkConnection.state instead, or use the two hooks above. Nothing in this package
    dispatches or forwards the old event.
  • New translation key chat.reportLostConnection.reconnecting.text (default "Reconnecting…").
    An untranslated language falls back to that English text, so nothing renders a raw
    chat.reportLostConnection… string. Add it to your dictionaries when you want it localized. The
    existing waitingNetwork key is unchanged and still used for the no-network case, so its
    translations stay valid.
  • A socket drop on a working network now reads differently. Anything keyed on the banner's
    message, or on the system:network:connection:lost notification meaning "no network", should be
    re-checked. The notification type is unchanged so existing filters keep working; it has always
    tracked the socket despite network in its name.
  • Channel no longer reloads on connection.recovered. If you relied on that component to
    refresh a channel after a reconnect, the client does it now.

…ng i18n init

The persistent "Waiting for network…" notification was removed moments after being
published, whenever the socket dropped before `Streami18n.init()` resolved — an offline
app launch, a captive portal, an expired token. That is precisely when the banner is
wanted, and there was none.

Dismissal was part of the subscription effect's cleanup, so any change to that effect's
dependencies destroyed the notification, and `t` changes identity when init completes
(the constructed placeholder gives way to i18next's real one). Re-subscribing does not
republish, so the banner was gone for good.

Dismissal is now scoped to the mount, which is what it was always for. `t` stays in the
subscription's dependencies, where the lint rule wants it; re-subscribing on a change is
idempotent and leaves the notification alone.

The existing test passed only because `waitFor` polls and caught the transient window
between the notification being published and being removed. The new test drops the socket
without awaiting anything first, so it lands inside the init window, and fails if
dismissal is moved back into the subscription's cleanup.
`connection.changed` and `connection.recovered` carry `connection: 'network' | 'ws'` in
stream-chat v10, and both variants reach every existing handler. A handler that ignores
the field therefore reacts to the device's network as well as to our WebSocket, which
would report a lost network every time the socket drops on a working one.

Every subscription keeps its event name and its `online` field; each now narrows to
`'ws'`, preserving today's behaviour exactly:

- `useReportLostConnectionSystemNotification` publishes its banner for the socket only.
  The notification type says `network`, but the fact behind it has always been the socket.
- `Channel` reloads its loaded message window on the socket's recovery only.

The compiler cannot help here — both variants have the same payload shape, so an
un-guarded handler keeps compiling and keeps behaving as before. Two tests fail if either
guard is removed.

`Channel` also drops its `connection.changed` subscription entirely. The branch that read
it went with the dead `online` ref, and `handleEvent` has no catch-all, so the event
reached the component and did nothing.

The mock builders take an optional `ConnectionType`, defaulting to `'ws'` so existing call
sites keep the meaning they had when this event could only be about the socket.
`ConnectionRecoveryManager` reloads every active channel and then dispatches
`connection.recovered`. `Channel` handled that event by calling `channel.reload()`
again, and since it marks its channel active while mounted, every open channel was
reloaded twice per reconnect — two full `watch()` requests each. `Channel.reload()`'s
`_reloading` flag is a re-entrancy guard and has already reset by the time the event is
dispatched, so it did not collapse the pair. Measured at two reloads per reconnect
before this change and one after.

The handler goes, and with it the `connection.recovered` subscription: nothing else in
`handleEvent` reacted to that event. The reconciliation React's reload existed for — a
hard delete that happened offline arrives via no event, so only a re-query surfaces it —
still happens, because the client reloads active channels itself.

The old test dispatched `connection.recovered` directly, which is exactly why it never
saw the duplicate; the replacement drives a whole reconnect from the socket coming back.
`keeps rendering when the reload fails` moves with the behaviour it covered: the client
reloads with `Promise.allSettled`, so a socket flapping mid-reload cannot throw into the
component at all.

Note the `stream-chat` pin is deliberately left at 10.0.0-rc.7. It has to move to the
release that carries the connection work — rc.9 exports none of `ConnectionType`,
`NetworkConnectionState` or `client.networkConnection`, which this branch already
imports — so bumping it is a release-time step, not part of this change.
The persistent banner read "Waiting for network…" whenever `connection.changed` reported
`online: false`. That event is the WebSocket, so the message told users their network was
down when the server had closed the socket, the token had expired, or a health check had
timed out on working Wi-Fi.

It now reads both facts and picks the wording:

- the device reports no network → "Waiting for network…"
- the network is up, or unknown, and the socket is down → "Reconnecting…"

One banner throughout, replaced rather than stacked when the reason changes. Choosing
that grouping is a copy decision rather than a fact about connectivity, which is why the
client publishes no combined status and why the decision is made here, in the component
that renders the copy.

The existing translation key keeps the network case, where its wording was always true,
so its translations stay valid and only one new string was needed.

It also reads the current state at mount. It reacted only to transitions before, so a
client that was already offline showed nothing until something changed.

Two things kept deliberately:

- One notification type for both messages. Consumers filter banners on
  `system:network:connection:lost` — the SDK's own cookbook recipe does — so splitting it
  would silently stop those filters seeing the socket case. The `network` in the name is
  historical; the message is what was wrong.
- The socket half stays on `connection.changed` rather than `client.wsConnection.state`.
  The event is held `WS_OFFLINE_ANNOUNCE_DELAY_MS` (5s) on the way down and dropped
  entirely if the socket returns inside that window, which is what stops a brief flap
  strobing the banner; the store publishes the raw edge. The socket's last announced value
  therefore lives in a ref seeded from the store only once — re-reading the store on every
  effect re-run discarded what the event had said and dismissed the banner.

`ConnectionType` is imported from the client rather than redeclared, so a connection type
added there breaks `yarn build` here until someone decides what the banner should say
about it.

Both signals are subscribed imperatively rather than through `useNetworkConnectionState` /
`useWSConnectionState`: `Chat` calls this hook, and re-rendering the whole tree on every
network flap is what those hooks exist to let consumers avoid.
Driving the two connection facts apart by hand is awkward, and the obvious tool is the
wrong one: DevTools' "Offline" checkbox takes down `navigator.onLine` *and* the socket,
which is the one combination that always worked. What needs exercising is a dead socket on
a live network — a server close, an expired token, a health-check timeout — because that is
the case the offline banner used to describe as "Waiting for network…".

Two toggles, showing both facts and flipping each independently. Hidden behind a sidebar
button that mirrors the theme and RTL toggles, backed by a `devTools.connectionPanel`
setting that defaults to off.

Both toggles simulate rather than sever, and the socket one writes the store *and*
dispatches `connection.changed`, because that is what the real socket does: the store
carries the raw state, the event is the announcement the banner listens to. Closing the
real socket is no use for a toggle — it reconnects on its own within a second or two, so
it would flip back by itself — and the one thing that does hold,
`client.closeConnection()`, deliberately dispatches no event, so no banner appears. The
component's doc gives the console one-liner for the genuine path, including the
five-second announce delay the toggles cannot show.

The German and Italian dictionaries here are complete by type assertion, so the new
`chat.reportLostConnection.reconnecting.text` key needed translating in both — the
assertion fails the build naming any key left out.

Earned its keep immediately: it surfaced a regression where every watched request went out
without a `connection_id`.
@coderabbitai

coderabbitai Bot commented Sep 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: f65e985e-18e7-416a-8a0a-df762f451151

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

MartinCupela and others added 6 commits September 16, 2026 13:48
…r here

`stream-chat` no longer dispatches `connection.changed`: connectivity is published only as
`client.wsConnection.state` and `client.networkConnection.state`. This catches the SDK up.

The lost-connection banner subscribes to the socket's store and holds a drop itself. The
client used to hold it for five seconds before publishing, so a brief flap did not strobe
the banner; it now publishes every transition as it happens, and how long to wait before
telling a person is a decision about copy rather than about connectivity. The hook waits
`WS_OFFLINE_ANNOUNCE_DELAY_MS`, exported by the client so the UI SDKs do not each pick their
own number, and cancels the wait if the socket returns inside it. Coming back is not held:
there is no reason to sit on good news.

Three details the previous shape already needed and this keeps. The status seeded on mount
is shown immediately rather than held, so an application that starts up with no connection
says so. The held drop lives in a ref, because the effect re-runs when `Streami18n.init()`
replaces `t` and restarting the timer would extend the wait. And the device's network is
not held back at all: a browser reports that accurately and it does not flap the way a
socket does.

`dispatchConnectionChangedEvent` is replaced by `setWSConnectionStatus` and
`setNetworkStatus`, which write the stores. The tests that asserted the banner now advance
timers past the window, and one that asserted the raw store must *not* show a banner is
replaced by one asserting that a flap inside the window shows nothing at all.

Also renames registrar to reporter throughout, following the client, and drops the dev
panel's event dispatch so its socket toggle writes the store alone.

BREAKING CHANGE: `dispatchConnectionChangedEvent` is removed from `stream-chat-react/mock-builders`.
Use `setWSConnectionStatus(client, isOnline)` or `setNetworkStatus(client, isOnline)`; a test
asserting on the lost-connection banner must also advance timers by
`WS_OFFLINE_ANNOUNCE_DELAY_MS`, which the client used to absorb.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The wait before a socket drop reaches the banner was a constant exported by the client, so
changing it meant replacing this hook. It is now
`client.wsConnection.config.offlineNotificationDisplayDelayMs`, read when the drop happens
rather than captured, so a change reaches the next drop without the subscription being
re-established. Setting it to zero reports a drop immediately.

The tests derive the window from the same place instead of hard-coding five seconds, and one
new test pins that a configured value is honoured.

BREAKING CHANGE: `WS_OFFLINE_ANNOUNCE_DELAY_MS` is gone from `stream-chat`. A test that
advances timers past the banner's hold window should read
`client.wsConnection.config.offlineNotificationDisplayDelayMs`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The client moved two things and this catches up with both.

The connection id left `client.wsConnection.state` for `client.connectionIdManager`, which
the request layer awaits for anything that watches or subscribes to presence. Nothing in
this SDK reads it any more, so the WebSocket state hook stops exposing it and the fixtures
publish one through the manager instead — without that, every mocked watch waits forever.

The socket's status is `isHealthy` again, with `lastHealthyAt` and `lastUnhealthyAt`
alongside it. The device's network keeps `isOnline`. That ends the collision the two
identical names created: the test that demonstrated the hazard of a blind destructure now
demonstrates that there is nothing left to alias.

BREAKING CHANGE: `useWSConnectionState()` returns `isHealthy`, `lastHealthyAt` and
`lastUnhealthyAt`, and no longer returns `connectionId`. `setWSConnectionStatus` from
`stream-chat-react/mock-builders` publishes the connection id through
`client.connectionIdManager` as well as writing the store.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts:
#	src/components/Channel/Channel.tsx
# Conflicts:
#	examples/tutorial/package.json
#	examples/vite/package.json
#	package.json
#	yarn.lock
@github-actions

Copy link
Copy Markdown

Size Change: +4.3 kB (+0.52%)

Total Size: 831 kB

📦 View Changed
Filename Size Change
dist/cjs/channel-detail.js 24.7 kB -2 B (-0.01%)
dist/cjs/index.js 147 kB +2.66 kB (+1.84%)
dist/cjs/slot-layout.js 520 B +1 B (+0.19%)
dist/cjs/SlotLayout.js 13.2 kB +1 B (+0.01%)
dist/cjs/Thread.js 64.2 kB -94 B (-0.15%)
dist/es/components/Channel/Channel.mjs 949 B -97 B (-9.27%)
dist/es/components/ChannelListItem/ChannelListItemActionButtons.mjs 1.07 kB -1.52 kB (-58.61%) 🏆
dist/es/components/Chat/hooks/useNetworkConnectionState.mjs 931 B +931 B (new file) 🆕
dist/es/components/Chat/hooks/useReportLostConnectionSystemNotification.mjs 2.23 kB +1.52 kB (+214.95%) 🆘
dist/es/components/Chat/hooks/useWSConnectionState.mjs 857 B +857 B (new file) 🆕
dist/es/index.mjs 8.01 kB +40 B (+0.5%)
ℹ️ View Unchanged
Filename Size
dist/cjs/audioProcessing.js 1.74 kB
dist/cjs/emojis.js 2.57 kB
dist/cjs/MessageComposerContext.js 929 B
dist/cjs/mp3-encoder.js 814 B
dist/cjs/ReactPlayerWrapper.js 544 B
dist/cjs/slot-js 2.32 kB
dist/cjs/useChannel.js 413 B
dist/cjs/useChannelHeaderOnlineStatus.js 21.7 kB
dist/cjs/usePopoverPosition.js 23.3 kB
dist/css/channel-detail.css 2.84 kB
dist/css/emoji-picker.css 178 B
dist/css/emoji-replacement.css 456 B
dist/css/index.css 42.5 kB
dist/es/a11y/a11yUtils.mjs 630 B
dist/es/a11y/accessibleLabel.mjs 764 B
dist/es/a11y/hooks/useAriaIdentifiers.mjs 540 B
dist/es/a11y/hooks/useListboxKeyboardNavigation.mjs 1.52 kB
dist/es/a11y/hooks/useResolvedModalAriaProps.mjs 497 B
dist/es/a11y/hooks/useVirtualizedListboxKeyboardNavigation.mjs 1.39 kB
dist/es/channel-detail.mjs 802 B
dist/es/components/Accessibility/AriaLiveAnnouncerProvider.mjs 1.65 kB
dist/es/components/Accessibility/AriaLiveOutlet.mjs 964 B
dist/es/components/Accessibility/AriaLiveOutletContext.mjs 194 B
dist/es/components/Accessibility/hooks/useAudioPlaybackChangeAnnouncements.mjs 425 B
dist/es/components/Accessibility/hooks/useFocusReturn.mjs 916 B
dist/es/components/Accessibility/hooks/useIncomingMessageAnnouncements.mjs 1.26 kB
dist/es/components/Accessibility/hooks/useInertWhenHidden.mjs 1.62 kB
dist/es/components/Accessibility/hooks/useInteractionAnnouncements.mjs 3.31 kB
dist/es/components/Accessibility/NotificationAnnouncer.mjs 1.36 kB
dist/es/components/Accessibility/scheduling/useAnnouncementQueue.mjs 793 B
dist/es/components/Accessibility/scheduling/useDebouncedAnnounce.mjs 1.68 kB
dist/es/components/Accessibility/scheduling/useSettledAnnouncement.mjs 1.84 kB
dist/es/components/Accessibility/useAriaLiveAnnouncer.mjs 293 B
dist/es/components/AIStateIndicator/AIStateIndicator.mjs 475 B
dist/es/components/AIStateIndicator/hooks/useAIState.mjs 444 B
dist/es/components/Attachment/attachment-sizing.mjs 1.05 kB
dist/es/components/Attachment/Attachment.mjs 1.15 kB
dist/es/components/Attachment/AttachmentActions.mjs 1.65 kB
dist/es/components/Attachment/AttachmentContainer.mjs 1.98 kB
dist/es/components/Attachment/Audio.mjs 1.43 kB
dist/es/components/Attachment/audioSampling.mjs 1.29 kB
dist/es/components/Attachment/components/DownloadButton.mjs 676 B
dist/es/components/Attachment/components/FileSizeIndicator.mjs 436 B
dist/es/components/Attachment/FileAttachment.mjs 569 B
dist/es/components/Attachment/Geolocation.mjs 1.41 kB
dist/es/components/Attachment/Giphy.mjs 1.04 kB
dist/es/components/Attachment/giphyAccessibility.mjs 481 B
dist/es/components/Attachment/icons.mjs 411 B
dist/es/components/Attachment/Image.mjs 346 B
dist/es/components/Attachment/LinkPreview/Card.mjs 1.01 kB
dist/es/components/Attachment/LinkPreview/UnableToRenderCard.mjs 411 B
dist/es/components/Attachment/ModalGallery.mjs 2.08 kB
dist/es/components/Attachment/UnsupportedAttachment.mjs 403 B
dist/es/components/Attachment/utils.mjs 740 B
dist/es/components/Attachment/VideoAttachment.mjs 702 B
dist/es/components/Attachment/VisibilityDisclaimer.mjs 362 B
dist/es/components/Attachment/VoiceRecording.mjs 1.7 kB
dist/es/components/AudioPlayback/AudioPlaybackArbiter.mjs 964 B
dist/es/components/AudioPlayback/AudioPlayer.mjs 3.85 kB
dist/es/components/AudioPlayback/AudioPlayerPool.mjs 815 B
dist/es/components/AudioPlayback/components/DurationDisplay.mjs 596 B
dist/es/components/AudioPlayback/components/formatTime.mjs 339 B
dist/es/components/AudioPlayback/components/keyboardSeek.mjs 524 B
dist/es/components/AudioPlayback/components/PlaybackRateButton.mjs 300 B
dist/es/components/AudioPlayback/components/ProgressBar.mjs 833 B
dist/es/components/AudioPlayback/components/progressBarA11y.mjs 484 B
dist/es/components/AudioPlayback/components/useInteractiveProgressBar.mjs 1.07 kB
dist/es/components/AudioPlayback/components/WaveProgressBar.mjs 1.74 kB
dist/es/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.mjs 659 B
dist/es/components/AudioPlayback/WithAudioPlayback.mjs 1.18 kB
dist/es/components/Avatar/Avatar.mjs 980 B
dist/es/components/Avatar/AvatarStack.mjs 665 B
dist/es/components/Avatar/ChannelAvatar.mjs 344 B
dist/es/components/Avatar/GroupAvatar.mjs 868 B
dist/es/components/Avatar/utils.mjs 183 B
dist/es/components/Badge/Badge.mjs 470 B
dist/es/components/Badge/MediaBadge.mjs 430 B
dist/es/components/BaseImage/BaseImage.mjs 682 B
dist/es/components/BaseImage/ImagePlaceholder.mjs 404 B
dist/es/components/BaseImage/toBaseImageDescriptors.mjs 547 B
dist/es/components/Button/Button.mjs 529 B
dist/es/components/Button/PlayButton.mjs 480 B
dist/es/components/Channel/constants.mjs 156 B
dist/es/components/Channel/hooks/useChannelCapabilities.mjs 350 B
dist/es/components/Channel/hooks/useChannelContainerClasses.mjs 388 B
dist/es/components/ChannelHeader/ChannelHeader.mjs 1.02 kB
dist/es/components/ChannelHeader/hooks/useChannelHasMembersOnline.mjs 624 B
dist/es/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.mjs 681 B
dist/es/components/ChannelList/ChannelList.mjs 1.19 kB
dist/es/components/ChannelList/ChannelListHeader.mjs 430 B
dist/es/components/ChannelList/ChannelLists.mjs 693 B
dist/es/components/ChannelList/ChannelNavigation.mjs 684 B
dist/es/components/ChannelList/hooks/useChannelListKeyboardNavigation.mjs 1.25 kB
dist/es/components/ChannelList/hooks/useChannelMembershipState.mjs 262 B
dist/es/components/ChannelList/hooks/useChannelMembersState.mjs 300 B
dist/es/components/ChannelList/hooks/useChannelPaginatorState.mjs 540 B
dist/es/components/ChannelList/hooks/useSelectedChannelState.mjs 403 B
dist/es/components/ChannelListItem/ChannelListItem.mjs 1.23 kB
dist/es/components/ChannelListItem/ChannelListItemTimestamp.mjs 518 B
dist/es/components/ChannelListItem/ChannelListItemUI.mjs 1.52 kB
dist/es/components/ChannelListItem/hooks/useChannelDisplayName.mjs 831 B
dist/es/components/ChannelListItem/hooks/useChannelPreviewInfo.mjs 624 B
dist/es/components/ChannelListItem/hooks/useIsChannelMuted.mjs 399 B
dist/es/components/ChannelListItem/hooks/useIsUserMuted.mjs 271 B
dist/es/components/ChannelListItem/hooks/useMessageDeliveryStatus.mjs 654 B
dist/es/components/ChannelListItem/utils.a11y.mjs 2.63 kB
dist/es/components/ChannelListItem/utils.mjs 2.75 kB
dist/es/components/Chat/Chat.mjs 1.24 kB
dist/es/components/Chat/hooks/useChat.mjs 556 B
dist/es/components/Chat/hooks/useCreateChatClient.mjs 526 B
dist/es/components/Chat/hooks/useCreateChatContext.mjs 444 B
dist/es/components/Chat/hooks/useSplitActionSet.mjs 317 B
dist/es/components/DateSeparator/DateSeparator.mjs 572 B
dist/es/components/Dialog/components/Alert.mjs 647 B
dist/es/components/Dialog/components/Callout.mjs 825 B
dist/es/components/Dialog/components/ContextMenu.mjs 5.53 kB
dist/es/components/Dialog/components/Prompt.mjs 1.08 kB
dist/es/components/Dialog/components/Viewer.mjs 980 B
dist/es/components/Dialog/hooks/useDialog.mjs 688 B
dist/es/components/Dialog/hooks/usePopoverPosition.mjs 925 B
dist/es/components/Dialog/service/DialogAnchor.mjs 2.06 kB
dist/es/components/Dialog/service/DialogManager.mjs 1.34 kB
dist/es/components/Dialog/service/DialogPortal.mjs 1.02 kB
dist/es/components/DragAndDrop/DragAndDropContainer.mjs 1.16 kB
dist/es/components/EmptyStateIndicator/EmptyStateIndicator.mjs 603 B
dist/es/components/EventComponent/EventComponent.mjs 462 B
dist/es/components/FileIcon/FileIconSet.mjs 6.71 kB
dist/es/components/FileIcon/iconMap.mjs 512 B
dist/es/components/FileIcon/mimeTypes.mjs 1.73 kB
dist/es/components/FileIcon/mjs 599 B
dist/es/components/Form/FieldError.mjs 261 B
dist/es/components/Form/hooks/useFormState.mjs 550 B
dist/es/components/Form/mjs 1.58 kB
dist/es/components/Form/NumericInput.mjs 1.34 kB
dist/es/components/Form/SwitchField.mjs 1.54 kB
dist/es/components/Form/TextInput.mjs 1.27 kB
dist/es/components/Form/TextInputFieldSet.mjs 376 B
dist/es/components/Gallery/Gallery.mjs 654 B
dist/es/components/Gallery/GalleryContext.mjs 335 B
dist/es/components/Gallery/GalleryHeader.mjs 1.21 kB
dist/es/components/Gallery/GalleryUI.mjs 2.02 kB
dist/es/components/Icons/createIcon.mjs 429 B
dist/es/components/Icons/icons.mjs 18.5 kB
dist/es/components/Icons/mjs 378 B
dist/es/components/InfiniteScrollPaginator/hooks/useCursorPaginator.mjs 598 B
dist/es/components/InfiniteScrollPaginator/InfiniteScroll.mjs 1.34 kB
dist/es/components/InfiniteScrollPaginator/InfiniteScrollPaginator.mjs 1.14 kB
dist/es/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.mjs 826 B
dist/es/components/ListItemLayout/ListItemLayout.mjs 707 B
dist/es/components/Loading/LoadingChannel.mjs 639 B
dist/es/components/Loading/LoadingChannels.mjs 377 B
dist/es/components/Loading/LoadingErrorIndicator.mjs 405 B
dist/es/components/Loading/LoadingIndicator.mjs 247 B
dist/es/components/Loading/progress-indicators.mjs 734 B
dist/es/components/Loading/UploadedSizeIndicator.mjs 413 B
dist/es/components/Loading/UploadProgressIndicator.mjs 344 B
dist/es/components/LoadMore/LoadMoreButton.mjs 503 B
dist/es/components/LoadMore/LoadMorePaginator.mjs 378 B
dist/es/components/Location/hooks/useLiveLocationSharingManager.mjs 640 B
dist/es/components/Location/ShareLocationDialog.mjs 2.26 kB
dist/es/components/MediaRecorder/AudioRecorder/AudioRecorder.mjs 628 B
dist/es/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.mjs 1.03 kB
dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.mjs 1.05 kB
dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.mjs 996 B
dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.mjs 900 B
dist/es/components/MediaRecorder/AudioRecorder/hooks/useTimeElapsed.mjs 434 B
dist/es/components/MediaRecorder/AudioRecorder/recordingStateIdentity.mjs 227 B
dist/es/components/MediaRecorder/AudioRecorder/RecordingTimer.mjs 322 B
dist/es/components/MediaRecorder/classes/AmplitudeRecorder.mjs 1.07 kB
dist/es/components/MediaRecorder/classes/BrowserPermission.mjs 758 B
dist/es/components/MediaRecorder/classes/MediaRecorderController.mjs 2.58 kB
dist/es/components/MediaRecorder/hooks/useMediaRecorder.mjs 917 B
dist/es/components/MediaRecorder/observable/BehaviorSubject.mjs 353 B
dist/es/components/MediaRecorder/observable/mjs 186 B
dist/es/components/MediaRecorder/observable/Observable.mjs 315 B
dist/es/components/MediaRecorder/observable/Subject.mjs 550 B
dist/es/components/MediaRecorder/observable/Subscription.mjs 211 B
dist/es/components/MediaRecorder/RecordingPermissionDeniedNotification.mjs 503 B
dist/es/components/MediaRecorder/transcode/audioProcessing.mjs 758 B
dist/es/components/MediaRecorder/transcode/index.mjs 351 B
dist/es/components/MediaRecorder/transcode/wav.mjs 1.33 kB
dist/es/components/Message/emojiRegex.mjs 450 B
dist/es/components/Message/hooks/useActionHandler.mjs 604 B
dist/es/components/Message/hooks/useDeleteHandler.mjs 617 B
dist/es/components/Message/hooks/useFlagHandler.mjs 383 B
dist/es/components/Message/hooks/useMarkUnreadHandler.mjs 414 B
dist/es/components/Message/hooks/useMentionsHandler.mjs 377 B
dist/es/components/Message/hooks/useMessageAlsoSentInChannelNavigation.mjs 1.01 kB
dist/es/components/Message/hooks/useMessageReminder.mjs 299 B
dist/es/components/Message/hooks/useMessageTextStreaming.mjs 783 B
dist/es/components/Message/hooks/useMuteHandler.mjs 704 B
dist/es/components/Message/hooks/useOpenThreadHandler.mjs 352 B
dist/es/components/Message/hooks/usePinHandler.mjs 608 B
dist/es/components/Message/hooks/useReactionHandler.mjs 1.33 kB
dist/es/components/Message/hooks/useReactionsFetcher.mjs 498 B
dist/es/components/Message/hooks/useRetryHandler.mjs 301 B
dist/es/components/Message/hooks/useUserHandler.mjs 255 B
dist/es/components/Message/hooks/useUserRole.mjs 746 B
dist/es/components/Message/Message.mjs 1.39 kB
dist/es/components/Message/MessageAlsoSentInChannelIndicator.mjs 655 B
dist/es/components/Message/MessageBlocked.mjs 451 B
dist/es/components/Message/MessageBubble.mjs 246 B
dist/es/components/Message/MessageDeletedBubble.mjs 398 B
dist/es/components/Message/MessageEditedIndicator.mjs 722 B
dist/es/components/Message/MessageRepliesCountButton.mjs 1.08 kB
dist/es/components/Message/MessageStatus.mjs 1.26 kB
dist/es/components/Message/MessageText.mjs 1.63 kB
dist/es/components/Message/MessageTimestamp.mjs 383 B
dist/es/components/Message/MessageTranslationIndicator.mjs 886 B
dist/es/components/Message/MessageUI.mjs 2.78 kB
dist/es/components/Message/PinIndicator.mjs 627 B
dist/es/components/Message/QuotedMessage.mjs 427 B
dist/es/components/Message/ReminderNotification.mjs 1.01 kB
dist/es/components/Message/renderText/componentRenderers/Anchor.mjs 406 B
dist/es/components/Message/renderText/componentRenderers/Emoji.mjs 246 B
dist/es/components/Message/renderText/componentRenderers/Mention.mjs 307 B
dist/es/components/Message/renderText/regex.mjs 440 B
dist/es/components/Message/renderText/rehypePlugins/emojiMarkdownPlugin.mjs 338 B
dist/es/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.mjs 1.47 kB
dist/es/components/Message/renderText/remarkPlugins/htmlToTextPlugin.mjs 243 B
dist/es/components/Message/renderText/remarkPlugins/imageToLink.mjs 591 B
dist/es/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.mjs 824 B
dist/es/components/Message/renderText/remarkPlugins/plusPlusToEmphasis.mjs 962 B
dist/es/components/Message/renderText/remarkPlugins/remarkIgnoreMarkdown.mjs 337 B
dist/es/components/Message/renderText/renderText.mjs 1.58 kB
dist/es/components/Message/StreamedMessageText.mjs 500 B
dist/es/components/Message/Timestamp.mjs 525 B
dist/es/components/Message/utils.mjs 2.15 kB
dist/es/components/MessageActions/DeleteMessageAlert.mjs 616 B
dist/es/components/MessageActions/DownloadSubmenu.mjs 843 B
dist/es/components/MessageActions/downloadUtils.mjs 980 B
dist/es/components/MessageActions/hooks/useBaseMessageActionSetFilter.mjs 1.29 kB
dist/es/components/MessageActions/MessageActions.mjs 4.22 kB
dist/es/components/MessageActions/QuickMessageActionButton.mjs 359 B
dist/es/components/MessageActions/RemindMeSubmenu.mjs 999 B
dist/es/components/MessageBounce/MessageBounceModal.mjs 347 B
dist/es/components/MessageBounce/MessageBouncePrompt.mjs 805 B
dist/es/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.mjs 1.19 kB
dist/es/components/MessageComposer/AttachmentPreviewList/AttachmentUploadedSizeIndicator.mjs 655 B
dist/es/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.mjs 1.81 kB
dist/es/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.mjs 1.06 kB
dist/es/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.mjs 758 B
dist/es/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.mjs 1.3 kB
dist/es/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.mjs 534 B
dist/es/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.mjs 919 B
dist/es/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.mjs 545 B
dist/es/components/MessageComposer/AttachmentSelector/AttachmentSelector.mjs 3.31 kB
dist/es/components/MessageComposer/AttachmentSelector/CommandsMenu.mjs 1.39 kB
dist/es/components/MessageComposer/CommandChip.mjs 563 B
dist/es/components/MessageComposer/CooldownTimer.mjs 294 B
dist/es/components/MessageComposer/EditedMessagePreview.mjs 334 B
dist/es/components/MessageComposer/hooks/useAttachmentManagerState.mjs 542 B
dist/es/components/MessageComposer/hooks/useAttachmentsForPreview.mjs 362 B
dist/es/components/MessageComposer/hooks/useCanCreatePoll.mjs 285 B
dist/es/components/MessageComposer/hooks/useCooldownRemaining.mjs 429 B
dist/es/components/MessageComposer/hooks/useCreateMessageComposerContext.mjs 419 B
dist/es/components/MessageComposer/hooks/useIsCooldownActive.mjs 274 B
dist/es/components/MessageComposer/hooks/useMessageComposerBindings.mjs 348 B
dist/es/components/MessageComposer/hooks/useMessageComposerCommands.mjs 414 B
dist/es/components/MessageComposer/hooks/useMessageComposerController.mjs 435 B
dist/es/components/MessageComposer/hooks/useMessageComposerHasSendableData.mjs 274 B
dist/es/components/MessageComposer/hooks/useMessageContentIsEmpty.mjs 274 B
dist/es/components/MessageComposer/hooks/usePasteHandler.mjs 579 B
dist/es/components/MessageComposer/hooks/useSendMessageFn.mjs 1.15 kB
dist/es/components/MessageComposer/hooks/useTextareaRef.mjs 252 B
dist/es/components/MessageComposer/hooks/useUpdateMessageFn.mjs 620 B
dist/es/components/MessageComposer/hooks/utils.mjs 324 B
dist/es/components/MessageComposer/icons.mjs 1.28 kB
dist/es/components/MessageComposer/LinkPreviewList.mjs 1.06 kB
dist/es/components/MessageComposer/MessageComposer.mjs 854 B
dist/es/components/MessageComposer/MessageComposerActions.mjs 1.41 kB
dist/es/components/MessageComposer/MessageComposerUI.mjs 1.43 kB
dist/es/components/MessageComposer/preEditSnapshot.mjs 575 B
dist/es/components/MessageComposer/QuotedMessageIndicator.mjs 263 B
dist/es/components/MessageComposer/QuotedMessagePreview.mjs 3.06 kB
dist/es/components/MessageComposer/RemoveAttachmentPreviewButton.mjs 474 B
dist/es/components/MessageComposer/SendButton.mjs 488 B
dist/es/components/MessageComposer/SendToChannelCheckbox.mjs 764 B
dist/es/components/MessageComposer/StopAIGenerationButton.mjs 373 B
dist/es/components/MessageComposer/WithDragAndDropUpload.mjs 1.57 kB
dist/es/components/MessageList/FloatingDateSeparator.mjs 679 B
dist/es/components/MessageList/GiphyPreviewMessage.mjs 278 B
dist/es/components/MessageList/hooks/MessageList/useEnrichedMessages.mjs 629 B
dist/es/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.mjs 932 B
dist/es/components/MessageList/hooks/MessageList/useMessageListElements.mjs 624 B
dist/es/components/MessageList/hooks/MessageList/useMessageListScrollManager.mjs 1.72 kB
dist/es/components/MessageList/hooks/MessageList/useScrollLocationLogic.mjs 1.05 kB
dist/es/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.mjs 1.21 kB
dist/es/components/MessageList/hooks/useCanPaginateReplies.mjs 1.26 kB
dist/es/components/MessageList/hooks/useLastDeliveredData.mjs 418 B
dist/es/components/MessageList/hooks/useLastOwnMessage.mjs 249 B
dist/es/components/MessageList/hooks/useLastReadData.mjs 411 B
dist/es/components/MessageList/hooks/useMarkRead.mjs 1.26 kB
dist/es/components/MessageList/hooks/useThreadHead.mjs 564 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.mjs 969 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.mjs 434 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.mjs 396 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.mjs 636 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.mjs 647 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.mjs 499 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.mjs 422 B
dist/es/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.mjs 808 B
dist/es/components/MessageList/MessageList.mjs 3.35 kB
dist/es/components/MessageList/MessageListMainPanel.mjs 284 B
dist/es/components/MessageList/messageSourceKey.mjs 876 B
dist/es/components/MessageList/NewMessageNotification.mjs 561 B
dist/es/components/MessageList/renderMessages.mjs 1.1 kB
dist/es/components/MessageList/ScrollToLatestMessageButton.mjs 1.17 kB
dist/es/components/MessageList/UnreadMessagesNotification.mjs 850 B
dist/es/components/MessageList/UnreadMessagesSeparator.mjs 744 B
dist/es/components/MessageList/utils.mjs 2.26 kB
dist/es/components/MessageList/VirtualizedMessageList.mjs 4.34 kB
dist/es/components/MessageList/VirtualizedMessageListComponents.mjs 1.64 kB
dist/es/components/Modal/GlobalModal.mjs 1.81 kB
dist/es/components/Notifications/hooks/useNotificationApi.mjs 1.3 kB
dist/es/components/Notifications/hooks/useNotifications.mjs 569 B
dist/es/components/Notifications/hooks/useNotificationTarget.mjs 377 B
dist/es/components/Notifications/hooks/useSystemNotifications.mjs 457 B
dist/es/components/Notifications/Notification.mjs 1.23 kB
dist/es/components/Notifications/NotificationConfigurationContext.mjs 386 B
dist/es/components/Notifications/NotificationList.mjs 3.06 kB
dist/es/components/Notifications/notificationTarget.mjs 917 B
dist/es/components/Poll/hooks/useManagePollVotesRealtime.mjs 686 B
dist/es/components/Poll/hooks/usePollAnswerPagination.mjs 586 B
dist/es/components/Poll/hooks/usePollOptionVotesPagination.mjs 601 B
dist/es/components/Poll/mjs 926 B
dist/es/components/Poll/Poll.mjs 302 B
dist/es/components/Poll/PollActions/AddCommentPrompt.mjs 1.32 kB
dist/es/components/Poll/PollActions/EndPollAlert.mjs 820 B
dist/es/components/Poll/PollActions/PollAction.mjs 492 B
dist/es/components/Poll/PollActions/PollActions.mjs 1.37 kB
dist/es/components/Poll/PollActions/PollAnswerList.mjs 1.05 kB
dist/es/components/Poll/PollActions/PollOptionsFullList.mjs 583 B
dist/es/components/Poll/PollActions/PollQuestion.mjs 346 B
dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotes.mjs 852 B
dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.mjs 709 B
dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesList.mjs 614 B
dist/es/components/Poll/PollActions/PollResults/PollResults.mjs 1.11 kB
dist/es/components/Poll/PollActions/SuggestPollOptionPrompt.mjs 1.31 kB
dist/es/components/Poll/PollContent.mjs 489 B
dist/es/components/Poll/PollCreationDialog/MultipleAnswersField.mjs 1.44 kB
dist/es/components/Poll/PollCreationDialog/NameField.mjs 761 B
dist/es/components/Poll/PollCreationDialog/OptionFieldSet.mjs 2.35 kB
dist/es/components/Poll/PollCreationDialog/PollCreationDialog.mjs 1.1 kB
dist/es/components/Poll/PollCreationDialog/PollCreationDialogControls.mjs 815 B
dist/es/components/Poll/PollCreationDialog/PollOptionReorderHandle.mjs 1.01 kB
dist/es/components/Poll/PollHeader.mjs 683 B
dist/es/components/Poll/PollOptionList.mjs 845 B
dist/es/components/Poll/PollOptionSelector.mjs 1.52 kB
dist/es/components/Portal/Portal.mjs 300 B
dist/es/components/ReactFileUtilities/UploadButton.mjs 813 B
dist/es/components/ReactFileUtilities/utils.mjs 1.06 kB
dist/es/components/Reactions/hooks/useFetchReactions.mjs 714 B
dist/es/components/Reactions/hooks/useProcessReactions.mjs 1.25 kB
dist/es/components/Reactions/MessageReactions.mjs 2.08 kB
dist/es/components/Reactions/MessageReactionsDetail.mjs 1.98 kB
dist/es/components/Reactions/reactionOptions.mjs 1.11 kB
dist/es/components/Reactions/ReactionSelector.mjs 1.56 kB
dist/es/components/Reactions/ReactionSelectorWithButton.mjs 873 B
dist/es/components/Reactions/SpriteImage.mjs 727 B
dist/es/components/Reactions/utils/utils.mjs 284 B
dist/es/components/SafeAnchor/SafeAnchor.mjs 336 B
dist/es/components/Search/hooks/useAnnounceSearchResultCount.mjs 1.31 kB
dist/es/components/Search/hooks/useSearchQueriesInProgress.mjs 450 B
dist/es/components/Search/hooks/useSearchResultsKeyboardNavigation.mjs 721 B
dist/es/components/Search/Search.mjs 642 B
dist/es/components/Search/SearchBar/SearchBar.mjs 1.34 kB
dist/es/components/Search/SearchContext.mjs 331 B
dist/es/components/Search/SearchResults/SearchResultItem.mjs 1.39 kB
dist/es/components/Search/SearchResults/SearchResults.mjs 716 B
dist/es/components/Search/SearchResults/SearchResultsHeader.mjs 910 B
dist/es/components/Search/SearchResults/SearchResultsPresearch.mjs 322 B
dist/es/components/Search/SearchResults/SearchSourceResultList.mjs 649 B
dist/es/components/Search/SearchResults/SearchSourceResultListFooter.mjs 562 B
dist/es/components/Search/SearchResults/SearchSourceResults.mjs 561 B
dist/es/components/Search/SearchResults/SearchSourceResultsEmpty.mjs 326 B
dist/es/components/Search/SearchResults/SearchSourceResultsHeader.mjs 148 B
dist/es/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.mjs 390 B
dist/es/components/Search/SearchSourceResultsContext.mjs 344 B
dist/es/components/SkipNavigation/SkipNavigation.mjs 1.01 kB
dist/es/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.mjs 1.52 kB
dist/es/components/SummarizedMessagePreview/SummarizedMessagePreview.mjs 799 B
dist/es/components/TextareaComposer/hooks/useTextareaPlaceholder.mjs 685 B
dist/es/components/TextareaComposer/SuggestionList/CommandItem.mjs 480 B
dist/es/components/TextareaComposer/SuggestionList/EmoticonItem.mjs 508 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.mjs 632 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/MentionItem.mjs 439 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/MentionSuggestionTitle.mjs 236 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/mjs 775 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/SpecialMentionItem.mjs 161 B
dist/es/components/TextareaComposer/SuggestionList/MentionItem/UserGroupItem.mjs 566 B
dist/es/components/TextareaComposer/SuggestionList/SuggestionList.mjs 2.42 kB
dist/es/components/TextareaComposer/SuggestionList/SuggestionListItem.mjs 649 B
dist/es/components/TextareaComposer/SuggestionList/TokenizedSuggestionParts.mjs 608 B
dist/es/components/TextareaComposer/TextareaComposer.mjs 3.78 kB
dist/es/components/Thread/Thread.mjs 1.37 kB
dist/es/components/Thread/ThreadHead.mjs 453 B
dist/es/components/Thread/ThreadHeader.mjs 1.48 kB
dist/es/components/Thread/ThreadStart.mjs 458 B
dist/es/components/Threads/hooks/useCloseThread.mjs 428 B
dist/es/components/Threads/ThreadContext.mjs 265 B
dist/es/components/Threads/ThreadList/ThreadList.mjs 1.44 kB
dist/es/components/Threads/ThreadList/ThreadListEmptyPlaceholder.mjs 385 B
dist/es/components/Threads/ThreadList/ThreadListHeader.mjs 428 B
dist/es/components/Threads/ThreadList/ThreadListItem.mjs 351 B
dist/es/components/Threads/ThreadList/ThreadListItemUI.mjs 1.87 kB
dist/es/components/Threads/ThreadList/ThreadListLoadingIndicator.mjs 441 B
dist/es/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.mjs 661 B
dist/es/components/Threads/ThreadList/useThreadHighlighting.mjs 893 B
dist/es/components/Threads/ThreadList/utils.a11y.mjs 1.83 kB
dist/es/components/Threads/UnreadCountBadge.mjs 332 B
dist/es/components/Tooltip/hooks/useEnterLeaveHandlers.mjs 296 B
dist/es/components/Tooltip/Tooltip.mjs 556 B
dist/es/components/TypingIndicator/hooks/useDebouncedTypingActive.mjs 974 B
dist/es/components/TypingIndicator/TypingIndicator.mjs 1.35 kB
dist/es/components/TypingIndicator/TypingIndicatorDots.mjs 411 B
dist/es/components/TypingIndicator/TypingIndicatorHeader.mjs 946 B
dist/es/components/TypingIndicator/utils/getTypingStatusMessage.mjs 442 B
dist/es/components/UtilityComponents/ErrorBoundary.mjs 313 B
dist/es/components/UtilityComponents/hooks/useMutationObserver.mjs 798 B
dist/es/components/UtilityComponents/useStableId.mjs 455 B
dist/es/components/VideoPlayer/ReactPlayerWrapper.mjs 475 B
dist/es/components/VideoPlayer/VideoPlayer.mjs 445 B
dist/es/components/VideoPlayer/VideoThumbnail.mjs 556 B
dist/es/components/VisuallyHidden/VisuallyHidden.mjs 397 B
dist/es/constants/messageTypes.mjs 173 B
dist/es/context/AttachmentContext.mjs 344 B
dist/es/context/AttachmentSelectorContext.mjs 272 B
dist/es/context/ChannelInstanceContext.mjs 385 B
dist/es/context/ChannelListContext.mjs 369 B
dist/es/context/ChatContext.mjs 282 B
dist/es/context/ComponentContext.mjs 257 B
dist/es/context/DialogManagerContext.mjs 1.42 kB
dist/es/context/MessageBounceContext.mjs 712 B
dist/es/context/MessageComposerContext.mjs 408 B
dist/es/context/MessageContext.mjs 285 B
dist/es/context/MessageListContext.mjs 325 B
dist/es/context/MessageTranslationViewContext.mjs 1.53 kB
dist/es/context/ModalContext.mjs 403 B
dist/es/context/PollContext.mjs 300 B
dist/es/context/requireContext.mjs 440 B
dist/es/context/TranslationContext.mjs 425 B
dist/es/context/useChannel.mjs 333 B
dist/es/context/VirtualizedMessageListContext.mjs 338 B
dist/es/context/WithComponents.mjs 311 B
dist/es/context/WorkspaceNavigationContext.mjs 492 B
dist/es/emojis.mjs 126 B
dist/es/hooks/useIsDmChannel.mjs 503 B
dist/es/hooks/useMessagePaginator.mjs 275 B
dist/es/i18n/runtimeDefaults.mjs 1.1 kB
dist/es/i18n/Streami18n.mjs 1.01 kB
dist/es/i18n/TranslationBuilder/index.mjs 122 B
dist/es/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.mjs 563 B
dist/es/i18n/TranslationBuilder/notifications/translators.mjs 669 B
dist/es/i18n/TranslationBuilder/notifications/translatorsByNotificationType.mjs 1.19 kB
dist/es/i18n/useStreami18n.mjs 708 B
dist/es/i18n/utils.mjs 466 B
dist/es/mp3-encoder.mjs 778 B
dist/es/plugins/ChannelDetail/AvatarWithChannelDetail.mjs 726 B
dist/es/plugins/ChannelDetail/ChannelDetail.mjs 920 B
dist/es/plugins/ChannelDetail/ChannelDetailContext.mjs 373 B
dist/es/plugins/ChannelDetail/ChannelDetailEmptyList.mjs 307 B
dist/es/plugins/ChannelDetail/ChannelDetailListLoadingIndicator.mjs 419 B
dist/es/plugins/ChannelDetail/ChannelDetailNavButton.mjs 505 B
dist/es/plugins/ChannelDetail/ChannelDetailSearchInput.mjs 574 B
dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigator.mjs 1.79 kB
dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.mjs 831 B
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.mjs 455 B
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.mjs 1.5 kB
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.mjs 1.22 kB
dist/es/plugins/ChannelDetail/Views/ChannelFilesView/useChannelFilesSearch.mjs 723 B
dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.mjs 3.91 kB
dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.mjs 3.67 kB
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.mjs 471 B
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.mjs 2.33 kB
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.mjs 726 B
dist/es/plugins/ChannelDetail/Views/ChannelMediaView/useChannelMediaSearch.mjs 720 B
dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.mjs 3.47 kB
dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.mjs 1.08 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.mjs 2.3 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.mjs 1.65 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.mjs 1.65 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.mjs 1.31 kB
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.mjs 369 B
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/useChannelMemberCount.mjs 408 B
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/useChannelMemberIds.mjs 430 B
dist/es/plugins/ChannelDetail/Views/ChannelMembersView/useChannelMembersSearch.mjs 744 B
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.mjs 466 B
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.mjs 1.85 kB
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.mjs 404 B
dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesSearch.mjs 879 B
dist/es/plugins/ChannelDetail/VirtualizedList/VirtualizedList.mjs 670 B
dist/es/plugins/Emojis/EmojiPicker.mjs 1.3 kB
dist/es/plugins/Emojis/middleware/textComposerEmojiMiddleware.mjs 1.38 kB
dist/es/plugins/SlotGeometry/SlotGeometry.mjs 2.26 kB
dist/es/plugins/SlotLayout/a11y.utility.mjs 295 B
dist/es/plugins/SlotLayout/ChannelSlot.mjs 569 B
dist/es/plugins/SlotLayout/ChatViewNavigationContext.mjs 2.4 kB
dist/es/plugins/SlotLayout/hooks/useLayoutViewState.mjs 470 B
dist/es/plugins/SlotLayout/hooks/useSlotEntity.mjs 1.85 kB
dist/es/plugins/SlotLayout/layout/Slot.mjs 725 B
dist/es/plugins/SlotLayout/layout/WorkspaceLayout.mjs 394 B
dist/es/plugins/SlotLayout/layoutController/LayoutController.mjs 2.96 kB
dist/es/plugins/SlotLayout/layoutController/serialization.mjs 805 B
dist/es/plugins/SlotLayout/mjs 3.65 kB
dist/es/plugins/SlotLayout/slotBinding.mjs 331 B
dist/es/plugins/SlotLayout/slotRegistry.mjs 1.09 kB
dist/es/plugins/SlotLayout/ThreadListSlot.mjs 680 B
dist/es/plugins/SlotLayout/ThreadSlot.mjs 492 B
dist/es/plugins/SlotLayout/ThreadSlotContext.mjs 190 B
dist/es/plugins/SlotLayout/workspaceNavigationAdapter.mjs 1.28 kB
dist/es/slot-layout.mjs 499 B
dist/es/slot-mjs 125 B
dist/es/store/hooks/useStateStore.mjs 484 B
dist/es/utils/findReverse.mjs 188 B
dist/es/utils/getChannel.mjs 720 B
dist/es/utils/getTextareaCaretRect.mjs 856 B
dist/es/utils/getWholeChar.mjs 368 B
dist/es/utils/isDmChannel.mjs 247 B
dist/es/utils/mergeDeep.mjs 197 B
dist/es/utils/useStableCallback.mjs 831 B

compressed-size-action

@codecov

codecov Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (release-v15@ce59094). Learn more about missing BASE report.

Additional details and impacted files
@@              Coverage Diff               @@
##             release-v15    #3281   +/-   ##
==============================================
  Coverage               ?   85.21%           
==============================================
  Files                  ?      526           
  Lines                  ?    15335           
  Branches               ?     4866           
==============================================
  Hits                   ?    13068           
  Misses                 ?     2267           
  Partials               ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@MartinCupela
MartinCupela merged commit 3098a90 into release-v15 Sep 18, 2026
11 checks passed
@MartinCupela
MartinCupela deleted the feat/network-connection-observer branch September 18, 2026 12:55

This branch was successfully deployed

2 active deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant