Skip to content

fix: close CSS gaps, fix ChannelList dialog portal, and clean up icons#3079

Merged
oliverlaz merged 4 commits intomasterfrom
fix/sdk-css-gaps-and-channel-list-portal
Mar 30, 2026
Merged

fix: close CSS gaps, fix ChannelList dialog portal, and clean up icons#3079
oliverlaz merged 4 commits intomasterfrom
fix/sdk-css-gaps-and-channel-list-portal

Conversation

@oliverlaz
Copy link
Copy Markdown
Member

@oliverlaz oliverlaz commented Mar 30, 2026

🎯 Goal

Fix several SDK CSS gaps that forced consumers to add workarounds, fix the ChannelList context menu appearing unstyled because its dialog portal rendered outside the themed .str-chat subtree, and fix icon issues left over from the Phosphor migration.

πŸ›  Implementation details

SDK CSS fixes:

  • Add min-height: 0 to .str-chat__chat-view, .str-chat__chat-view__channels, and .str-chat__channel β€” these are flex children that need the reset to prevent scrollable content from overflowing their containers
  • Add width: 100% to the header-layout mixin β€” headers (ChannelHeader, ThreadHeader) are flex items that need to span their parent's full width
  • Add width: 100% to .str-chat__main-panel-inner β€” it uses align-items: center which shrinks children, so it needs an explicit width to fill its parent
  • Add scrollbar-gutter: stable to the scrollable-y mixin β€” prevents layout shift when scrollbars appear/disappear
  • Remove incorrect height: auto override on .str-chat__thread .str-chat__main-panel-inner (and the now-redundant virtualized re-override) β€” the base height: 100% should apply in all cases

ChannelList dialog portal fix:

  • Move DialogManagerProvider inside the .str-chat div so DialogPortalDestination renders within the themed subtree β€” this fixes context menus (mute, pin, etc.) appearing unstyled because .str-chat .str-chat__context-menu selectors didn't match and CSS variables didn't inherit

Icon fixes (post-Phosphor migration cleanup):

  • Use IconThreadFill for the active threads tab in ChatView instead of the old IconBubbleText6SolidChatMessage (16Γ—16 legacy icon)
  • Fix MessageActions CSS that overrode fill='none' on stroke-based Phosphor icons, causing the reply icon to appear filled on hover β€” replaced path-level fill/stroke overrides with color inheritance via currentColor
  • Remove 9 unused icon exports: IconArrowRight, IconBubble3ChatMessage, IconBubbleText6SolidChatMessage, IconInfo, IconLightBulbSimple, IconMinus, IconMinusSmall, IconSettingsGear2, IconVoiceFill

Example cleanup:

  • Remove overrides from examples/vite/src/index.scss that are now handled by the SDK
  • Define IconGear and IconLightBulb locally in the vite example app (using createIcon) to replace removed SDK exports
  • Replace other removed icon imports with available alternatives
  • Add yellow tint to lightbulb icon in dark mode

🎨 UI Changes

  • Threads tab active icon now uses the correct filled thread bubble instead of the legacy icon
  • Reply icon in message action hover no longer appears filled
  • No other visual changes in the vite example app

Several SDK components were missing layout properties that consumers
had to work around (e.g. min-height: 0 on flex children, width: 100%
on headers and main-panel-inner). Additionally, the ChannelList's
DialogManagerProvider rendered its portal destination outside the
.str-chat element, causing context menus to lose theme styles.

- Add min-height: 0 to .str-chat__chat-view, __chat-view__channels,
  and __channel (flex overflow fix)
- Add width: 100% to header-layout mixin and .str-chat__main-panel-inner
- Add scrollbar-gutter: stable to scrollable-y mixin
- Remove incorrect height: auto override on thread's main-panel-inner
- Move DialogManagerProvider inside .str-chat div in ChannelList
- Remove now-redundant overrides from vite example
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 30, 2026

Size Change: -6.99 kB (-1.13%)

Total Size: 614 kB

πŸ“¦ View Changed
Filename Size Change
dist/cjs/emojis.js 2.96 kB -1 B (-0.03%)
dist/cjs/index.js 237 kB -90 B (-0.04%)
dist/cjs/WithAudioPlayback.js 42.1 kB -3.39 kB (-7.45%) βœ…
dist/css/index.css 47.3 kB -17 B (-0.04%)
dist/es/emojis.mjs 2.47 kB -2 B (-0.08%)
dist/es/index.mjs 235 kB -117 B (-0.05%)
dist/es/WithAudioPlayback.mjs 42 kB -3.38 kB (-7.45%) βœ…
ℹ️ View Unchanged
Filename Size
dist/cjs/audioProcessing.js 1.32 kB
dist/cjs/mp3-encoder.js 1.27 kB
dist/css/emoji-replacement.css 456 B
dist/es/audioProcessing.mjs 1.31 kB
dist/es/mp3-encoder.mjs 756 B

compressed-size-action

@codecov
Copy link
Copy Markdown

codecov bot commented Mar 30, 2026

Codecov Report

βœ… All modified and coverable lines are covered by tests.
βœ… Project coverage is 79.10%. Comparing base (3f09362) to head (4e4a0a5).
⚠️ Report is 8 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3079      +/-   ##
==========================================
- Coverage   79.12%   79.10%   -0.02%     
==========================================
  Files         426      426              
  Lines       12162    12153       -9     
  Branches     3917     3917              
==========================================
- Hits         9623     9614       -9     
  Misses       2539     2539              

β˜” View full report in Codecov by Sentry.
πŸ“’ 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.

Comment on lines 344 to -379
@@ -374,9 +374,9 @@ const UnMemoizedChannelList = (props: ChannelListProps) => {
</ChannelListUI>
)}
<NotificationList panel='channel-list' />
</div>
</ChannelListContextProvider>
</DialogManagerProvider>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happened here? Why the reorder?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The channel list context menu was unstyled as it was rendered outside outside .str-chat

Use IconThreadFill for the active threads tab in ChatView instead of
the old IconBubbleText6SolidChatMessage. Fix MessageActions CSS that
overrode fill='none' on stroke-based Phosphor icons, causing the reply
icon to appear filled. Remove 9 unused icon exports to reduce bundle
size. Update vite example app to use available icons and local
definitions for gear/lightbulb.
@oliverlaz oliverlaz changed the title fix: close CSS gaps in SDK layout and fix ChannelList dialog portal fix: close CSS gaps, fix ChannelList dialog portal, and clean up icons Mar 30, 2026
@oliverlaz oliverlaz merged commit a47981f into master Mar 30, 2026
9 checks passed
@oliverlaz oliverlaz deleted the fix/sdk-css-gaps-and-channel-list-portal branch March 30, 2026 16:05
github-actions bot pushed a commit that referenced this pull request Mar 31, 2026
## [14.0.0-beta.5](v14.0.0-beta.4...v14.0.0-beta.5) (2026-03-31)

### Bug Fixes

* assorted UI/UX fixes (Giphy, polls, dialogs, composer, headers) ([#3081](#3081)) ([6c06e04](6c06e04))
* close CSS gaps, fix ChannelList dialog portal, and clean up icons ([#3079](#3079)) ([a47981f](a47981f))
* **Icons:** sync icon catalog with refreshed Line SVGs ([#3080](#3080)) ([9472f7b](9472f7b))
* **MessageList:** set width on message list scroll container ([#3077](#3077)) ([3f09362](3f09362))
* post-review `MessageReactionsDetail` adjustments ([#3082](#3082)) ([a82bdcb](a82bdcb))
* use link icon for link-type attachments ([#3083](#3083)) ([241209e](241209e))

### Features

* **examples:** add RTL direction toggle to vite example app ([#3084](#3084)) ([887a326](887a326))
* **examples:** refresh react tutorial app for v14 ([#3078](#3078)) ([86ada37](86ada37))
@stream-ci-bot
Copy link
Copy Markdown

πŸŽ‰ This PR is included in version 14.0.0-beta.5 πŸŽ‰

The release is available on:

Your semantic-release bot πŸ“¦πŸš€

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants