* Use the new TimelineMediaPreview modifier on the room and pinned timeline screens.
* Use the same presentation logic for all timeline media previews.
* Fix a bug with the detection of the timeline end.
* Send pagination requests from the media preview screen.
* Add SwiftLint to the Danger workflow (it is no longer installed on the runner).
* Put SwiftLint back on all of the GitHub runners too.
* Set the function_parameter_count lint rule to 10.
* Make sure to clean-up any previews when the coordinator is done.
* Handle the viewInRoomTimeline action more appropriately.
* Extract composer toolbar to a dedicated component
* Use publisher for composer mode
* Introduce `RoomScreenComposerProvider`
* Add `ComposerToolbarViewModelTests`
* Rename protocols and add passthrough subjects for focused and composer mode
* Remove `ComposerToolbarViewActionHandler` and `ComposerToolbarCoordinatorParameters`
* Remove `RoomScreenComposerActionHandlerProtocol` and `RoomScreenComposerProviderProtocol`
* Re-arrange code a bit
* Remove composer mode being stored on `RoomScreen`
* Rename `process(viewAction: ComposerToolbarViewAction)` to `process(composerAction: ComposerToolbarViewAction)`
* Replace PassthroughSubject with direct function call
* Remove `ComposerToolbarCoordinator`
* Remove `cancelEdit` and `cancelReply` from external composer view model actions
* Use `RoomScreenComposerAction` as a sub-`RoomScreenViewModelAction`
* Move `ComposerToolbarViewModel` callback to actionsSubject
* Move `RoomScreenViewModel` callback to actionsSubject
* Fix `RoomScreenViewModelTests`
* Rename `composerAction` parameter to `roomAction`
* Fix unit tests
* Correctly tear down the user session on signing out
* Fix session verification <-> user session retain cycle, visible range debouncer leak
* Manually clean up coordinators retained within SwiftUI's NavigationStacks
* Slightly refactor the timeline content menu builder and prevent it from retaining the view model. Cleanup now unnecessarily optional RoomScreenCoordinator instance vars
* Move coordinator dismissal logic to the navigation modules
* Create media player screen
* Introduce `FileCache` to cache message attachments
* Add file loading functionality into the media provider
* Process tap action on timeline items
* Pass item taps to view model
* Navigate to media player on view model callback
* Commit project file
* Add changelog
* Rename media to video
* Add a loader when large videos being processed
* Add back button explicitly on video screen, fixes for light scheme
* Handle right swipe to dismiss video
* Add `stop` method to `Coordinator`
* Use new stop method to cleanup room screen
* Call stop implicitly when removing a child coordinator
* Revert placeholder avatar font change
* Fix PR remarks