Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
2f1c15e
Update release version to snapshot
Mar 23, 2026
3a3496e
Fix Sendable errors when building with Xcode 26.4 (#1321)
laevandus Mar 24, 2026
ca43e0e
[CI] Update TestFlight action to allow beta releases (#1325)
testableapple Mar 24, 2026
e00382f
Show "Pinned by you" when the current user pinned a message (#1329)
nuno-vieira Mar 24, 2026
2482f57
Fix voice recording QA issues (#1327)
nuno-vieira Mar 25, 2026
7dfdee2
Fix iPad split view navigation (#1320)
laevandus Mar 25, 2026
d89eff1
Fix: Single image/video attachment renders sharp tail corner when no …
nuno-vieira Mar 25, 2026
f9fee0b
[v5] Fix direct message channel avatars and avatar factory methods (#…
laevandus Mar 25, 2026
278ed8b
Fix giphy previews in quoted messages and channel list (#1333)
nuno-vieira Mar 25, 2026
e3450a3
Fix black borders on image preview in composer (#1334)
nuno-vieira Mar 26, 2026
a362e37
Update design system tokens (#1324)
laevandus Mar 26, 2026
130e4d5
Fix limit votes button missing a border in dark mode (#1336)
laevandus Mar 27, 2026
91bc787
[DemoApp] Resolve forceRTL Binding MainActor isolation in AppConfigur…
testableapple Mar 27, 2026
f9b7935
Update message actions icons (#1342)
martinmitrevski Mar 31, 2026
2c2ca2e
Show deleted messages in channel preview + missing channel item redes…
nuno-vieira Mar 31, 2026
dc6bcb2
Rename empty views from "No" prefix to "Empty" prefix (#1345)
nuno-vieira Mar 31, 2026
d014a48
Enable feature flags by default (#1340)
martinmitrevski Apr 1, 2026
adfc09a
Update deleted message design (#1349)
nuno-vieira Apr 1, 2026
6c4f692
Remove avatar placeholder leftover
martinmitrevski Apr 1, 2026
e690499
Fix jump when adding votes (#1352)
martinmitrevski Apr 1, 2026
0939ac4
Redesign `JumpToUnreadButton` (#1351)
nuno-vieira Apr 2, 2026
cf8ae29
Redesign message list separators (#1354)
nuno-vieira Apr 2, 2026
ce5daa3
Migrate all the old color tokens to new tokens (#1350)
laevandus Apr 2, 2026
357156d
Fix media gallery attachment not opening the correct item on first ta…
nuno-vieira Apr 2, 2026
81609fd
Fix timestamp animation glitch on swipe-to-reply (#1360)
nuno-vieira Apr 2, 2026
d46ad84
Fix message attachments sizes and message content width on iPad (#1335)
laevandus Apr 2, 2026
9b78690
Add configurable auto-send behavior for voice recordings on release (…
nuno-vieira Apr 3, 2026
9f6e975
Add 4.99.1 release notes to CHANGELOG.md (#1355)
testableapple Apr 3, 2026
6ae831d
Remove download file attachments icon (#1363)
martinmitrevski Apr 3, 2026
6cee364
Replace delete with mute icon in channel list (#1365)
martinmitrevski Apr 3, 2026
4a30074
Update send button icon when gif selected (#1366)
martinmitrevski Apr 6, 2026
19ec448
Fix file attachments border (#1369)
martinmitrevski Apr 6, 2026
a0e1fb1
Fix opening thread on swipe to reply (#1370)
martinmitrevski Apr 6, 2026
efd3407
Fix scrolling long messages in reactions overlay (#1374)
martinmitrevski Apr 6, 2026
0983406
Fix scroll to bottom button not working when message list is actively…
nuno-vieira Apr 6, 2026
91baa44
Fix sending messages twice when tapping fast (#1373)
martinmitrevski Apr 7, 2026
f35d67b
Fix view button in a thread not working the first time (#1376)
martinmitrevski Apr 7, 2026
29233b1
Fix error indicator position and styling to match v5 design spec (#1383)
nuno-vieira Apr 7, 2026
9b5424b
Fix colors of message annotation buttons in reactions overlay (#1386)
nuno-vieira Apr 7, 2026
92c8f96
Fixes in the polls views (#1377)
martinmitrevski Apr 7, 2026
6c5b2f8
Fix voice recording attachment container when quoting a message (#1388)
nuno-vieira Apr 7, 2026
a6a40d3
Clear attachments when a giphy command is selected (#1387)
martinmitrevski Apr 8, 2026
200eaae
UI Fixes to the channel list item (#1384)
martinmitrevski Apr 8, 2026
842bbd2
Export StreamChatCommonUI (#1394)
laevandus Apr 8, 2026
e8a21f7
Apply MainActor changes from Appearance (#1391)
laevandus Apr 8, 2026
a7fa5fb
UI Fixes in the media viewer (#1395)
martinmitrevski Apr 8, 2026
d657a54
Limit participant action label to 1 row (#1389)
martinmitrevski Apr 8, 2026
a5bce40
Update composer design: RTL send icon, attachment picker prompts, and…
nuno-vieira Apr 8, 2026
9e123fd
Improve AGENTS.md with accurate repo structure and missing guidance (…
nuno-vieira Apr 8, 2026
2a79a63
Bump rack-session from 2.1.1 to 2.1.2 (#1390)
dependabot[bot] Apr 9, 2026
ddc0279
Fix spacings in message annotations (#1403)
laevandus Apr 10, 2026
dc717fc
Fix v5 QA issues: navigation headers, member view renames, media view…
nuno-vieira Apr 10, 2026
2f6d88d
Apply latest JumpToUnreadButton design (#1404)
laevandus Apr 10, 2026
61ede5e
Redesign attachment uploading and error states (#1408)
nuno-vieira Apr 10, 2026
13387bc
Fix position of date overlay view (#1409)
martinmitrevski Apr 13, 2026
8092a3c
Fix environment workaround for translated text (#1411)
laevandus Apr 14, 2026
64ff09e
Fix delays when removing reactions in reaction details (#1417)
martinmitrevski Apr 15, 2026
8d09cad
Delete StreamCore dependency from xcode project (#1416)
testableapple Apr 15, 2026
67b592c
Fix empty share sheet when sharing a video from the full-screen media…
testableapple Apr 15, 2026
396f29b
Unified CDN & Media Loading Architecture (v5) (#1399)
nuno-vieira Apr 16, 2026
ac1043b
Update StreamChat dependency to 5.0.0 (#1421)
testableapple Apr 16, 2026
35e9c74
Bump 5.0.0
Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
143 changes: 114 additions & 29 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,82 @@ Guidance for AI coding agents (Copilot, Cursor, Aider, Claude, etc.) working in

### Repository purpose

This repo hosts Streams SwiftUI Chat SDK for iOS. It builds on the core client and provides SwiftUI-first chat components (views, view models, modifiers) for messaging apps.
This repo hosts Stream's SwiftUI Chat SDK for iOS. It builds on the core client and provides SwiftUI-first chat components (views, view models, modifiers) for messaging apps.

Agents should optimize for clean code, follow Apple's SwiftUI guidelines and Swift best practices, accessibility, and high test coverage when changing code. At the moment, we are building a new major version of the SDK, so we can make source-breaking changes without adding deprecations.
Agents should optimize for clean code, follow Apple's SwiftUI guidelines and Swift best practices, accessibility, and high test coverage when changing code. Avoid doing any source-breaking changes without adding deprecations.

### Tech & toolchain

- Language: Swift (SwiftUI)
- Language: Swift 6.0 (strict concurrency enabled — `swift-tools-version:6.0`)
- Primary distribution: Swift Package Manager (SPM)
- Project file: `StreamChatSwiftUI.xcodeproj` (used for builds and tests; SPM manifest does not declare test targets)
- Xcode: 16.x or newer (Apple Silicon supported)
- Platforms / deployment targets: Use the values set in Package.swift; do not lower targets without approval
- CI: GitHub Actions (assume PR validation for build + tests + lint)
- Linters & docs: SwiftLint and SwiftFormat
- Platforms / deployment targets: iOS 14+, macOS 11+ (see `Package.swift`; do not lower targets without approval)
- CI: GitHub Actions + Fastlane (see `.github/workflows/smoke-checks.yml`)
- Linting: SwiftLint (v0.59.1) — config in `.swiftlint.yml`
- Formatting: SwiftFormat (v0.58.2) — config in `.swiftformat`
- Code generation: SwiftGen (v6.5.1) — generates `L10n.swift` for localization strings
- Git hooks: lefthook (`lefthook.yml`) — runs SwiftLint fix + SwiftFormat on pre-commit, SwiftLint strict on pre-push
- Tool versions are pinned in `Githubfile`

### Dependencies

- **StreamChat** and **StreamChatCommonUI** from [`stream-chat-swift`](https://github.com/GetStream/stream-chat-swift) (≥ 5.0.0-beta)
- **Vendored libraries** (do not edit directly):
- `Sources/StreamChatSwiftUI/StreamNuke/` — vendored Nuke image loading
- `Sources/StreamChatSwiftUI/StreamSwiftyGif/` — vendored SwiftyGif
- Update these via `make update_nuke version=X.Y.Z` / `make update_swiftygif version=X.Y.Z`

### Project layout (high level)

```
Sources/
StreamChatSwiftUI/ # SwiftUI views, view models, theming, utils
Tests/
StreamChatSwiftUITests/ # Unit/UI tests for SwiftUI layer
StreamChatSwiftUI/ # Main SDK: views, view models, theming, utils
ChatChannel/ # Channel view & sub-components
ChatChannelList/ # Channel list view & view model
ChatComposer/ # Message composer
ChatMessageList/ # Message list rendering
ChatThreadList/ # Thread list
CommonViews/ # Shared/reusable SwiftUI views
Generated/ # Auto-generated (L10n.swift, version) — do not edit manually
Resources/ # Localization files (en.lproj, etc.)
StreamNuke/ # Vendored — do not edit
StreamSwiftyGif/ # Vendored — do not edit
Utils/ # Utilities, common helpers
ViewFactory/ # ViewFactory protocol & default implementation

DemoAppSwiftUI/ # Demo/sample app (use to validate UI changes)
StreamChatSwiftUITests/ # Unit & snapshot tests for the SDK
StreamChatSwiftUITestsApp/ # Test harness app for E2E tests
StreamChatSwiftUITestsAppTests/ # E2E / UI automation tests
Scripts/ # Helper scripts (bootstrap, dependency updates, docs)
fastlane/ # Fastlane lanes for CI (build, test, release)
```

When editing near other packages (e.g., StreamChat or StreamChatUI), prefer extending the SwiftUI layer rather than duplicating logic from dependencies.

### New files & target membership
When creating new source or resource files, add them to the correct Xcode target(s). Update the project (e.g. project.pbxproj) so each new file is included in the appropriate target's "Compile Sources" (or "Copy Bundle Resources" for assets). Match the target(s) used by sibling files in the same directory (e.g. Sources/StreamChatSwiftUI/ → StreamChatSwiftUI; Tests/StreamChatSwiftUITests/ → StreamChatSwiftUITests). Omitting target membership will cause build failures or unused files.

When creating new source or resource files, add them to the correct Xcode target(s). Update the project (e.g. `project.pbxproj`) so each new file is included in the appropriate target's "Compile Sources" (or "Copy Bundle Resources" for assets). Match the target(s) used by sibling files in the same directory (e.g. `Sources/StreamChatSwiftUI/` → StreamChatSwiftUI target; `StreamChatSwiftUITests/` → StreamChatSwiftUITests target). Omitting target membership will cause build failures or unused files.

### Local setup (SPM)

1. Open the repository in Xcode (root contains Package.swift).
1. Open the repository in Xcode (root contains `Package.swift` and `StreamChatSwiftUI.xcodeproj`).
2. Resolve packages.
3. Choose an iOS Simulator (e.g., iPhone 17 Pro) and Build.

Optional: sample/demo app
Optional: run `Scripts/bootstrap.sh` to install pinned versions of SwiftLint, SwiftFormat, and SwiftGen, and to set up lefthook git hooks.

### Demo app

If a sample app target exists in this repo, prefer running that to validate UI changes. Keep demo configs free of credentials and use placeholders like YOUR_STREAM_KEY.
The `DemoAppSwiftUI` target is a fully functional sample app. Prefer running it to validate UI changes. Keep demo configs free of credentials and use placeholders like `YOUR_STREAM_KEY`.

### Schemes

Typical scheme names include:
• StreamChatSwiftUI
• StreamChatSwiftUITests
Available shared schemes (under `StreamChatSwiftUI.xcodeproj/xcshareddata/xcschemes/`):
- `StreamChatSwiftUI` — builds the SDK framework
- `DemoAppSwiftUI` — builds and runs the demo app
- `StreamChatSwiftUITestsApp` — builds and runs the E2E test harness

Agents must query existing schemes before invoking xcodebuild.

Expand Down Expand Up @@ -76,33 +112,82 @@ xcodebuild \
-configuration Debug test
```

If a Makefile or scripts exist (e.g., make build, make test, ./scripts/lint.sh), prefer those to keep parity with CI. Discover with make help and ls scripts/.
### Linting & formatting

SwiftLint (strict mode):

```
swiftlint lint --config .swiftlint.yml --strict
```

SwiftFormat (check only — no edits):

```
swiftformat --config .swiftformat --lint .
```

SwiftFormat (auto-fix):

Linting & formatting
• SwiftLint (strict):
```
swiftformat --config .swiftformat .
```

Respect `.swiftlint.yml` and `.swiftformat` rules. Do not broadly disable rules; scope exceptions and justify in PRs.

### CI overview

CI is driven by Fastlane (see `fastlane/Fastfile`). Key lanes:

- `test_ui` — runs unit/snapshot tests
- `test_e2e_mock` — runs E2E tests against a mock server
- `build_demo` — builds the demo app
- `build_test_app_and_frameworks` — builds test app and SDK frameworks

The `smoke-checks.yml` workflow is the primary PR gate. It runs linting, formatting validation, unit tests, E2E tests, and demo app builds.

swiftlint --strict
### Generated code

• Respect .swiftlint.yml and any repo-specific rules. Do not broadly disable rules; scope exceptions and justify in PRs.
Do not manually edit files in `Sources/StreamChatSwiftUI/Generated/`:
- `L10n.swift` — generated by SwiftGen from localization `.strings` files. Edit the `.strings` source files instead.
- `SystemEnvironment+Version.swift` — updated automatically during releases.
- `L10n_template.stencil` — the SwiftGen template for localization generation.

### Localization

The SDK uses `defaultLocalization: "en"`. String resources live in `Sources/StreamChatSwiftUI/Resources/en.lproj/`. After modifying `.strings` files, regenerate `L10n.swift` by running SwiftGen (or let CI handle it). Always use `L10n` accessors for user-facing strings rather than raw string literals.

### Concurrency model

The project uses Swift 6.0 strict concurrency. Many public types and view models are annotated with `@MainActor`. When adding new code:
- Mark SwiftUI view models and UI-bound types as `@MainActor`
- Use `Sendable` conformances where needed for cross-isolation transfers
- Avoid introducing data races; the compiler will enforce actor isolation

### Development guidelines

Accessibility & UI quality

- Ensure components have accessibility labels, traits, and dynamic type support.
- Support both light/dark mode.
- Use the tokens, colors, fonts, utils etc all from InjectedValuesExtensions.swift.
- When using Figma MCP, all the tokens, colors and fonts are available in the InjectedValuesExtensions.swift file with the same names.
- Use the tokens, colors, fonts, utils etc all from `InjectedValuesExtensions.swift`.
- When using Figma MCP, all the tokens, colors and fonts are available in the `InjectedValuesExtensions.swift` file with the same names.

Testing policy

- Add/extend tests in StreamChatSwiftUITests/
- Prefer using the AssertSnapshot from StreamChatTestHelpers instead of using the SnapshotTesting framework directly.
- Avoid using the AssertAsync from StreamChatTestHelpers, instead use the XCTestExpectation directly whenever possible.
- Add/extend tests in `StreamChatSwiftUITests/Tests/` (mirrors the source directory structure)
- Test infrastructure (mocks, shared helpers) lives in `StreamChatSwiftUITests/Infrastructure/`
- Prefer using `AssertSnapshot` from StreamChatTestHelpers instead of using the SnapshotTesting framework directly.
- Avoid using `AssertAsync` from StreamChatTestHelpers, instead use `XCTestExpectation` directly whenever possible.

### Branching & changelog

- The default integration branch is `develop`. Feature branches are merged into `develop`.
- Update `CHANGELOG.md` under the `# Upcoming` section when making client-facing changes (follow the Keep a Changelog format with `### Added`, `### Fixed`, `### Changed` subsections).

Pull Requests:
### Pull Requests

- Use the Github CLI to create a PR and use the Linear MCP to link the relevant issue assigned to me.
- When creating a PR, the base branch should be the v5 branch.
- Make sure that the PR respects the PR template in .github/PULL_REQUEST_TEMPLATE.md.
- When creating a PR, the base branch should be the `develop` branch.
- Make sure that the PR respects the PR template in `.github/PULL_REQUEST_TEMPLATE.md`.
- Make sure to fill the template with atomic information, do not mention things that were done and then reverted in this same PR.
- Do not write "Made with Cursor" in the PR description.
58 changes: 58 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,64 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### 🔄 Changed

# [5.0.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/5.0.0)
_April 16, 2026_

### ✅ Added
- Redesign attachment uploading progress and error state indicators [#1408](https://github.com/GetStream/stream-chat-swiftui/pull/1408)
- Add inline upload progress and retry UI for file attachments [#1408](https://github.com/GetStream/stream-chat-swiftui/pull/1408)
- Add `RetryBadgeView` for failed uploads and thumbnail loads [#1408](https://github.com/GetStream/stream-chat-swiftui/pull/1408)
- Add `ComposerConfig.isVoiceRecordingAutoSendEnabled` to support sending a recording instantly on release [#1362](https://github.com/GetStream/stream-chat-swiftui/pull/1362)
- Redesign `JumpToUnreadButton` [#1351](https://github.com/GetStream/stream-chat-swiftui/pull/1351)
- Show deleted messages in channel list preview [#1338](https://github.com/GetStream/stream-chat-swiftui/pull/1338)
- Update deleted message design in the message list [#1349](https://github.com/GetStream/stream-chat-swiftui/pull/1349)
- Redesign new messages divider in the message list [#1354](https://github.com/GetStream/stream-chat-swiftui/pull/1354)
- Redesign the thread replies divider in the message replies list [#1354](https://github.com/GetStream/stream-chat-swiftui/pull/1354)

### 🐞 Fixed
- Fix attachment downloads not using CDN requester for URL signing and custom headers [#1399](https://github.com/GetStream/stream-chat-swiftui/pull/1399)
- Fix empty share sheet when sharing a video from the full-screen media viewer [#1418](https://github.com/GetStream/stream-chat-swiftui/pull/1418)
- Fix swipe-to-reply icon layout for outgoing messages and RTL [#1402](https://github.com/GetStream/stream-chat-swiftui/pull/1402)
- Fix unwanted border on the Edit button in Channel Info [#1402](https://github.com/GetStream/stream-chat-swiftui/pull/1402)
- Fix send button icon not mirroring in RTL layouts [#1397](https://github.com/GetStream/stream-chat-swiftui/pull/1397)
- Fix composer attachment picker prompt views layout to center all content vertically [#1397](https://github.com/GetStream/stream-chat-swiftui/pull/1397)
- Fix poll icon inconsistency in the attachment type picker and attachment previews [#1397](https://github.com/GetStream/stream-chat-swiftui/pull/1397)
- Fix voice recording attachment container rendering when quoting a message [#1388](https://github.com/GetStream/stream-chat-swiftui/pull/1388)
- Fix annotation button colors in the reactions overlay [#1386](https://github.com/GetStream/stream-chat-swiftui/pull/1386)
- Fix error indicator position and styling to match v5 design [#1383](https://github.com/GetStream/stream-chat-swiftui/pull/1383)
- Fix scroll to bottom button not working when the message list is actively scrolling [#1380](https://github.com/GetStream/stream-chat-swiftui/pull/1380)
- Fix timestamp snapping back faster than delivery indicator on swipe-to-reply [#1360](https://github.com/GetStream/stream-chat-swiftui/pull/1360)
- Fix tapping a non-first media attachment always opening the first item on initial tap [#1359](https://github.com/GetStream/stream-chat-swiftui/pull/1359)
- Pinned message label now shows "Pinned by you" when the current user pinned the message [#1329](https://github.com/GetStream/stream-chat-swiftui/pull/1329)
- Fix single media attachment without sharp tail corner when no caption [#1330](https://github.com/GetStream/stream-chat-swiftui/pull/1330)
- Fix editing a voice message removing the voice recording attachment [#1327](https://github.com/GetStream/stream-chat-swiftui/pull/1327)
- Fix hold-and-release mic gesture not sending the voice message immediately [#1327](https://github.com/GetStream/stream-chat-swiftui/pull/1327)
- Fix voice message playback state and waveform slider updates [#1327](https://github.com/GetStream/stream-chat-swiftui/pull/1327)
- Fix split view navigation on iPad [#1320](https://github.com/GetStream/stream-chat-swiftui/pull/1320)
- Fix rendering 1:1 direct message avatars and presence indicators [#1332](https://github.com/GetStream/stream-chat-swiftui/pull/1332)
- Fix giphy previews in the channel list and quote replies [#1333](https://github.com/GetStream/stream-chat-swiftui/pull/1333)
- Fix black borders on image preview in composer when editing or quoting a message [#1334](https://github.com/GetStream/stream-chat-swiftui/pull/1334)
- Fix quoted image preview not updating when switching to a different quoted message [#1334](https://github.com/GetStream/stream-chat-swiftui/pull/1334)
- Use fixed width for attachment previews [#1335](https://github.com/GetStream/stream-chat-swiftui/pull/1335)
- Fix showing bubble for quoted message and file or image attachment [#1335](https://github.com/GetStream/stream-chat-swiftui/pull/1335)
- Fix scaling of giphy attachments [#1335](https://github.com/GetStream/stream-chat-swiftui/pull/1335)
- Fix spacings in message annotations [#1403](https://github.com/GetStream/stream-chat-swiftui/pull/1403)

### 🔄 Changed
- Rename `AddUsersView`/`AddUsersViewModel` to `MemberAddView`/`MemberAddViewModel` [#1402](https://github.com/GetStream/stream-chat-swiftui/pull/1402)
- Unify Channel Info navigation headers styling [#1402](https://github.com/GetStream/stream-chat-swiftui/pull/1402)
- Renamed the `onMessageSent` callback to `willSendMessage` in `MessageComposerViewModel`, `ViewModelsFactory`, and `ComposerViewFactoryOptions` [#1327](https://github.com/GetStream/stream-chat-swiftui/pull/1327)
- Remove `InjectedChannelInfo` from `ChatChannelListItemView` [#1338](https://github.com/GetStream/stream-chat-swiftui/pull/1338)
- Rename empty state views from `No` prefix to `Empty` prefix [#1345](https://github.com/GetStream/stream-chat-swiftui/pull/1345)
- Migrate all the old color tokens to new color tokens [#1350](https://github.com/GetStream/stream-chat-swiftui/pull/1350)
- Replace `LinkDetectionTextView` with `StreamTextView` that uses `ChatMessage.attributedTextContent(layoutDirection:translationLanguage:)` [#1411](https://github.com/GetStream/stream-chat-swiftui/pull/1411)

# [4.99.1](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.99.1)
_April 01, 2026_

### 🐞 Fixed
- Fix pause button size in voice recording view [#1344](https://github.com/GetStream/stream-chat-swiftui/pull/1344)

# [5.0.0-beta](https://github.com/GetStream/stream-chat-swiftui/releases/tag/5.0.0-beta)
_March 23, 2026_

Expand Down
19 changes: 11 additions & 8 deletions DemoAppSwiftUI/AppConfiguration/AppConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,31 @@ final class AppConfiguration {
var reactionsPlacement: ReactionsPlacement = .top
/// The visual style used across the app (regular or liquid glass).
var appStyle: AppStyle = .regular
/// When enabled, releasing a hold-to-record gesture sends the voice message instantly.
var isVoiceRecordingAutoSendEnabled = false

enum AppStyle: String, CaseIterable {
case regular
case liquidGlass
}

/// Builds the demo app's `ComposerConfig` using current app configuration.
@MainActor static func makeComposerConfig() -> ComposerConfig {
ComposerConfig(
isVoiceRecordingAutoSendEnabled: AppConfiguration.default.isVoiceRecordingAutoSendEnabled
)
}

/// Builds the demo app's `MessageListConfig` using current app configuration.
@MainActor static func makeMessageListConfig() -> MessageListConfig {
MessageListConfig(
messageDisplayOptions: MessageDisplayOptions(
reactionsPlacement: AppConfiguration.default.reactionsPlacement,
reactionsStyle: AppConfiguration.default.reactionsStyle,
showOriginalTranslatedButton: true
reactionsStyle: AppConfiguration.default.reactionsStyle
),
dateIndicatorPlacement: .messageList,
userBlockingEnabled: true,
bouncedMessagesAlertActionsEnabled: true,
skipEditedMessageLabel: { message in
message.extraData["ai_generated"]?.boolValue == true
},
draftMessagesEnabled: true,
downloadFileAttachmentsEnabled: true
}
)
}
}
Loading
Loading