Commit Graph
100 Commits
Author SHA1 Message Date
RobinandGitHub f845397b87 Merge pull request #3093 from element-hq/toger5/src-to-lib-import
Transition from consuming js-sdk source to `lib` (build output)
2025-03-27 16:13:05 -04:00
Robin aab4efe03a Use type imports consistently 2025-03-27 16:09:59 -04:00
Robin eb18cbef78 Consolidate imports 2025-03-27 16:04:03 -04:00
Robin ae339ea5cc Fix formatting issues 2025-03-27 14:47:01 -04:00
Robin 33700d1529 Merge branch 'livekit' into toger5/src-to-lib-import 2025-03-27 14:35:08 -04:00
RobinandGitHub 21140f6f2c Merge pull request #3095 from element-hq/robin/berry
Upgrade to Yarn v4 (Berry)
2025-03-27 14:21:10 -04:00
Robin 6927a92ad3 Improve comments in linker plugin 2025-03-27 14:16:16 -04:00
Robin f99eb3c88f Merge branch 'livekit' into robin/berry 2025-03-27 14:07:24 -04:00
Robin a993d8cd26 Streamline the linker hook messages 2025-03-27 14:05:10 -04:00
RobinandGitHub fe382cfc0b Merge pull request #3053 from element-hq/robin/posthog-logout
Enable analytics only while authenticated
2025-03-24 10:14:48 -04:00
Robin 0ed1564d3e Merge branch 'livekit' into robin/posthog-logout 2025-03-24 10:10:28 -04:00
RobinandGitHub 1138a21b57 Merge pull request #3118 from element-hq/robin/errors-outside-boundary
Fix join errors mistakenly showing a generic error screen
2025-03-21 17:20:52 -04:00
Robin cd5ecb2352 Rename error boundary hook
It doesn't check whether it's actually used inside a GroupCallErrorBoundary, and it's generally useful for interacting with any error boundary, so I'm giving it a generic name to reflect this.
2025-03-21 15:17:41 -04:00
Robin 9a5dd10e27 Show errors that occur in GroupCallView using the error boundary
We were previously using the useGroupCallErrorBoundary hook to surface errors that happened during joining, but because that part is outside the GroupCallErrorBoundary it just ended up sending them to the app-level error boundary where they got displayed with a more generic message.
2025-03-21 14:59:27 -04:00
RobinandGitHub 246e6a6322 Merge pull request #3111 from element-hq/robin/test-ci
Move all tests into one workflow, give them clear names
2025-03-19 09:57:55 -04:00
RobinandGitHub 4a2f44a0de Merge pull request #3112 from element-hq/robin/blocked-conflicts
Run the 'prevent blocked' workflow even if PR has conflicts
2025-03-18 15:43:21 -04:00
Robin a304f37705 Run the 'prevent blocked' workflow even if PR has conflicts
See the description of pull_request versus pull_request_target documented at https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request.
2025-03-18 14:45:07 -04:00
Robin f2ff1919cb Move all tests into one workflow, give them clear names
The Playwright tests had no name before, making it confusing to add them to the branch protection requirements.
2025-03-18 13:48:52 -04:00
RobinandGitHub 7d6a60a6ad Merge pull request #3110 from element-hq/robin/participant-limits
Show "insufficient capacity" when hitting participant limits
2025-03-18 13:37:43 -04:00
Robin 45c3c7a37e Show "insufficient capacity" when hitting participant limits 2025-03-18 13:33:36 -04:00
RobinandGitHub 22977dcf65 Merge pull request #3109 from element-hq/robin/livekit-2.9.1
Downgrade to livekit-client v2.9.1
2025-03-18 11:41:26 -04:00
Robin 213f234e94 Downgrade to livekit-client v2.9.1
livekit-client v2.9.2 regresses switching between the front/back cameras.
2025-03-18 11:36:08 -04:00
Robin cb14b727ba Merge branch 'livekit' into robin/berry 2025-03-14 11:59:21 -04:00
Robin d633ec5fcd Update docs for Yarn Berry 2025-03-14 03:23:37 -04:00
Robin 0b26dc2f43 Create a plugin for linking other packages 2025-03-14 03:23:37 -04:00
Robin 31fb916b9d Enable CI to use Yarn Berry 2025-03-14 03:23:37 -04:00
Robin 95b37ea341 Upgrade to Yarn Berry 2025-03-14 03:23:37 -04:00
Robin fee9841183 Remove the dependency on buffer
It's not generally available in browser environments / certain Yarn modes and can easily be replaced by TextEncoder.
2025-03-14 02:09:48 -04:00
RobinandGitHub 5547e838d3 Merge pull request #3080 from element-hq/robin/pin-matrix-js-sdk
Pin matrix-js-sdk to a specific commit
2025-03-12 05:06:10 -04:00
Robin 3cf0ce3dcb Pin matrix-js-sdk to a specific commit
Whenever we use a Git dependency, we should reference a specific tag or commit rather than a branch name, because Yarn Classic is bad at recognizing when a Git dependency needs to be re-installed due to it resolving to a new version. (It seems to simply use the version from package.json as a cache key.)

This is relevant only for developers who run 'yarn install' on top of a previously up-to-date working copy, not for CI which re-installs the project on every run.
2025-03-11 16:25:03 -04:00
RobinandGitHub b5f5ab329a Merge pull request #3051 from element-hq/robin/return-to-lobby
Respect the returnToLobby flag
2025-03-05 12:17:53 -05:00
RobinandGitHub 308d42980f Merge pull request #3054 from element-hq/robin/og-brand
Use the configured brand name in OpenGraph tags
2025-03-05 12:09:25 -05:00
RobinandGitHub 0ca2627bd4 Merge pull request #3055 from element-hq/robin/join-action
Send a 'join' action when entering the call
2025-03-05 12:09:16 -05:00
Robin 359812d8b1 Explain why returnToLobby is false in SPA 2025-03-05 10:40:37 -05:00
Robin 5b1ea4501d Send a 'join' action when entering the call
Following a75952cf77, this is one more upgrade to the widget communication that I'd like to make within this release cycle.

The motivating issue is https://github.com/element-hq/element-web/issues/29429. Fundamentally, without a 'join' action, the only info Element Web can use to determine whether it's joined the call is whether a MatrixRTC membership exists. But membership state events can inaccurately represent the client's actual state (whether because delayed events aren't supported, or because the delayed event hasn't timed out yet), so I suggest we send a 'join' action here just as we do in the Element Web Jitsi wrapper (https://github.com/element-hq/element-web/blob/e9a3625bd6e9a64f216e3caeabca66f48b649332/src/vector/jitsi/index.ts#L503) to let Element Web tap directly into the widget's local state. (This will need additional Element Web changes, but is certainly backwards compatible.)
2025-03-05 09:25:52 -05:00
Robin ec73e7fa86 Use the configured brand name in OpenGraph tags
Overlooked some of these when reviewing https://github.com/element-hq/element-call/pull/3006.
2025-03-05 09:18:31 -05:00
Robin 65304473df Enable analytics only while authenticated
The one place where we should log out of PostHog and reset our analytics ID is when the user is logging out. This matches the behavior in Element Web and makes sense, I think, because logging out is essentially a request for the app to forget who you are. This means we should also start analytics at the point of logging in / reauthenticating.

I noticed while making this change that there was an unused branch in setClient, so I cleaned it up rather than making myself update it.
2025-03-05 09:12:18 -05:00
Robin 4919410ff0 Don't reset analytics ID when leaving calls
We shouldn't be calling PosthogAnalytics.instance.logout() when leaving the call in widget mode, because all this does is reset your analytics ID. In the big picture this is probably inflating our user count metrics.
2025-03-05 08:55:47 -05:00
Robin 28c45c6107 Avoid closing the widget in returnToLobby mode
If returnToLobby is enabled then we obviously want to keep the widget open once the user leaves the call.
2025-03-05 07:32:25 -05:00
Robin b5f5edba09 Fix the control flow of GroupCallView render function
2bb5b020e6 refactored the end of the GroupCallView render function to not use any early returns, and clumsily failed to account for the fall-through case that makes returnToLobby work (as opposed to sitting on a blank screen).
2025-03-05 07:29:56 -05:00
RobinandGitHub 771397389c Prevent PRs with the X-Blocked label from being merged (#3041)
Copied from matrix-js-sdk (https://github.com/matrix-org/matrix-js-sdk/blob/develop/.github/workflows/pull_request.yaml#L31)
2025-03-05 10:44:10 +00:00
RobinandGitHub e783339557 Merge pull request #3035 from element-hq/renovate/all-minor-patch
Update all non-major dependencies
2025-03-04 00:14:56 -05:00
Robin 36203c2017 Work around LiveKit's overly constrained dependencies
We need compatible versions of RxJS in our dependencies and LiveKit's dependencies, but LiveKit has pinned it to a very specific version which is now holding us back from updating. See https://github.com/livekit/components-js/issues/1101 for a request for a proper solution.
2025-03-04 00:13:00 -05:00
Robin db9f255a4a Update formatting 2025-03-03 23:41:29 -05:00
RobinandGitHub 6d6852d5b0 Merge pull request #3006 from Harshal-Taori-11/livekit
Added OpenGraph and Twitter meta tags for better link previews
2025-03-03 23:37:10 -05:00
31577d7263 Show an error screen when the SFU is at capacity (#3022)
Co-authored-by: Hugh Nimmo-Smith <hughns@users.noreply.github.com>
Co-authored-by: fkwp <fkwp@users.noreply.github.com>
2025-02-26 12:00:56 +00:00
2bb5b020e6 Leave session when error occurs and show error screens in widget mode (#3021)
Co-authored-by: Hugh Nimmo-Smith <hughns@users.noreply.github.com>
2025-02-26 10:20:30 +00:00
RobinandGitHub cd05df3e33 Merge pull request #3020 from element-hq/robin/clarify-use-latest
Clarify what useLatest is for
2025-02-24 18:22:46 +07:00
Robin 9b59544db2 Clarify what useLatest is for
I was touching this file and noticed a chance to clean up this little TODO comment by swapping in our useLatest hook and giving it better documentation.
2025-02-24 18:18:15 +07:00
RobinandGitHub 91671d9ff1 Merge pull request #3019 from element-hq/robin/actually-hide-header
Actually hide the header on error pages
2025-02-24 17:47:22 +07:00
Robin e4d7baf7bb Actually hide the header on error pages
Currently, if you set hideHeader to true, you get a big empty <header> on error pages which serves no purpose except to push the screen's content off center.
2025-02-24 17:37:11 +07:00
RobinandGitHub 832a5aaf57 Merge pull request #3011 from element-hq/robin/close-action
Send a 'close' action when the widget is ready to close
2025-02-24 17:23:33 +07:00
Robin 518c8eadca Finish the hangup procedure even if widget API throws errors 2025-02-24 11:48:05 +07:00
RobinandGitHub 028b3104e4 Merge pull request #3009 from element-hq/renovate/livekit-client
Update dependency livekit-client to v2.9.1
2025-02-20 13:24:17 +07:00
Robin a75952cf77 Send a 'close' action when the widget is ready to close
By keeping 'hangup' and 'close' as separate actions, we can allow Element Call widgets to stay on an error screen after the user has been disconnected without the widget completely disappearing from the host's UI. We don't have to request any additional capabilities to use a custom widget action like this one.
2025-02-20 11:17:17 +07:00
RobinandGitHub e636542b1e Prevent new devices from automatically starting unmuted in call (#2959) 2025-01-17 15:30:28 +00:00
RobinandGitHub cda802a2e9 Make error screens more visually consistent (#2951) 2025-01-17 09:35:39 +00:00
RobinandGitHub c218dc2f36 Remember previous mute states when devices disappear and reappear (#2957) 2025-01-17 09:11:17 +00:00
RobinandGitHub 74d4556878 Merge pull request #2954 from element-hq/renovate/major-vitest-monorepo
Update vitest monorepo to v3 (major)
2025-01-16 15:49:34 -05:00
Robin e68593ec47 Upgrade to vitest 3.0.1 2025-01-16 15:47:53 -05:00
RobinandGitHub e79a32ac63 Merge pull request #2950 from element-hq/renovate/sentry-vite-plugin-3.x
Update dependency @sentry/vite-plugin to v3
2025-01-16 15:34:45 -05:00
RobinandGitHub 0f40cb77ad Merge pull request #2940 from element-hq/renovate/livekit-client
Update dependency livekit-client to v2.8.0
2025-01-10 11:43:43 -05:00
RobinandGitHub 8bfdd1f455 Merge pull request #2910 from robintown/widget-theme-change
React to theme changes in widget mode
2025-01-08 15:56:02 -05:00
Robin acd4a1f179 Fix tests 2025-01-08 11:41:44 -05:00
Robin c66b8c0fd3 Merge branch 'livekit' into widget-theme-change 2025-01-08 11:27:46 -05:00
Robin cdde53cc44 Bump matrix-widget-api 2025-01-08 11:27:33 -05:00
Robin e477c16a0b Fix lint errors 2025-01-02 13:32:39 -05:00
Robin 5d8804d7e8 React to theme changes in widget mode 2024-12-17 20:03:17 -05:00
RobinandGitHub e4bd9d7cf9 Merge pull request #2816 from robintown/firefox-audio-output
Support selection of audio output device when using Firefox
2024-12-16 10:14:27 -05:00
RobinandGitHub 65cf8bf3ee Merge pull request #2899 from robintown/array-performance
Skip some redundant updates to the grid and spotlight
2024-12-16 10:06:52 -05:00
Robin 25d0338f35 Skip some redundant updates to the grid and spotlight
While debugging our layout shift issue I learned that a single change to the sort order of the participants can cause 3 or 4 redundant emissions of the same items in the same order. Since each of these would cause React to re-render the grid, skipping these spurious emissions seems like an easy performance win.
2024-12-13 16:40:20 -05:00
Robin f9e3fe3176 Use observables for more of the media devices logic 2024-12-13 15:37:29 -05:00
Robin de276b1fc3 Annotate the default device with a label 2024-12-13 15:22:44 -05:00
Robin 9c57720852 Merge branch 'livekit' into firefox-audio-output 2024-12-13 14:55:27 -05:00
RobinandGitHub 0c66ec5d71 Merge pull request #2894 from robintown/stable-visibility
Determine which tiles are on screen in a more stable manner
2024-12-13 09:16:49 -05:00
Robin 53565ddb76 Test that participants adjust order when screen size changes 2024-12-12 19:16:01 -05:00
Robin 00056a7cd9 Determine which tiles are on screen in a more stable manner
Instead of tracking for each individual tile whether it's visible, just track the total number of tiles that appear on screen. This ought to make the whole thing a lot less dynamic, which is crucial given that our UI renders asynchronously and RxJS doesn't really support cyclic dependencies in any rigorous way.

In particular this ought to make the following kind of situation impossible:
1. There 3 tiles, ABC. A and B are on screen.
2. Now C becomes important. The requested order is now CAB.
3. To reduce the size of the layout shift, the algorithm selects to swap just B and C in the original order, giving ACB. However, the UI is blocked and doesn't render this order yet.
4. For whatever reason, a spurious update of the importance algorithm occurs. It once again requests CAB.
5. Now because the UI was blocked, the layout still thinks that A and B are on screen (rather than A and C). It thinks that C is some weird island of "off-screen territory" in the middle of the tile order. This confuses it into swapping A and C rather than keeping the layout stable.

The reality is that whenever we think N tiles are visible on screen, we're always referring to the first N tiles in the grid. It's best if the code reflects this assumption.
2024-12-12 18:00:59 -05:00
b834d8f679 Add some quick-and-dirty debug info for TileStore (#2887)
* Add some quick-and-dirty debug info for TileStore

I'm still in need of more detailed data in order to understand why big layout shifts happen in large calls. This adds a developer option to enable logging and a visual indicator for the state of the TileStore. The indicator should be useful for matching up the behavior I'm seeing in my recordings with the right timestamps.

* Reduce performance impact of checking for whether debug mode is enabled

---------

Co-authored-by: Hugh Nimmo-Smith <hughns@element.io>
2024-12-11 10:23:42 +00:00
RobinandGitHub f8f054a4f9 Merge pull request #2853 from element-hq/renovate/vite-6.x
Update dependency vite to v6
2024-12-10 13:23:52 -05:00
RobinandGitHub 22678a7c71 Merge pull request #2880 from element-hq/renovate/all-minor-patch
Update all non-major dependencies
2024-12-10 13:06:36 -05:00
Robin 8b19beae68 Fix lint errors 2024-12-10 13:05:09 -05:00
RobinandGitHub ad9114a6e4 Merge pull request #2833 from robintown/depluralize
Fix a singular string using the plural form
2024-11-22 13:58:12 -05:00
Robin 44e1c136df Fix a singular string using the plural form 2024-11-22 13:45:39 -05:00
RobinandGitHub 1bbbd519c7 Merge pull request #2831 from robintown/shortcut-modifiers
Don't trigger keyboard shortcuts if modifiers are held
2024-11-22 13:25:24 -05:00
Robin 51e4a3b14b Don't trigger keyboard shortcuts if modifiers are held
None of these keyboard shortcuts expect modifier keys, so they should in fact expect the absence of modifiers.
2024-11-22 13:17:05 -05:00
RobinandGitHub 13887a8943 Merge pull request #2817 from element-hq/renovate/compound
Update dependency @vector-im/compound-web to v7.4.0
2024-11-22 09:31:35 -05:00
Robin f249b7d463 Create a virtual default audio output
Managing your audio output manually is kind of cumbersome; Chrome creates a default audio output for us, but now that audio outputs are enabled on Firefox as well, I find it necessary for a good user experience that there always be a way to set it to "whatever the default is".
2024-11-21 14:43:30 -05:00
Robin e5117b962c Enable audio output support on Firefox 2024-11-21 12:53:27 -05:00
RobinandGitHub 720c400e5f Merge pull request #2802 from robintown/device-fall-back
Don't fall back as eagerly to unselected devices
2024-11-21 11:39:10 -05:00
Robin 0718774cef Clarify how preferred devices work 2024-11-21 11:32:15 -05:00
Robin a2b452c1d8 Don't override the camera without pressing "switch camera" 2024-11-21 11:24:45 -05:00
Robin 465a784345 Merge branch 'livekit' into device-fall-back 2024-11-21 11:04:36 -05:00
RobinandGitHub 8de96878c0 Merge pull request #2803 from robintown/device-radio
Replace device dropdowns with radio buttons
2024-11-21 10:47:44 -05:00
RobinandGitHub 380fa67f57 Merge pull request #2811 from robintown/revert-memory-store
Revert memory store and update matrix-js-sdk
2024-11-20 10:42:41 -05:00
Robin 8830bd74cb Update matrix-js-sdk
Return matrix-js-sdk to the develop branch.
2024-11-20 10:40:08 -05:00
Robin 3ab9bb72e2 Revert "Init client with a memory store (for MSC4222) (#2764)"
This reverts commit 83fa9661cf. We won't need this hack once we're no longer using a matrix-js-sdk branch with MSC4222 support.
2024-11-20 10:22:42 -05:00
Robin 38085baab8 Replace device dropdowns with radio buttons
This is closer to what the designs actually want device settings to look like, and it avoids the visual glitch in which the dropdown would render underneath the slider.
2024-11-20 09:44:32 -05:00
Robin 770730ba6c Don't fall back as eagerly to unselected devices
Somewhere around version 131 or 132, Firefox has started being more paranoid about media device fingerprinting, and will not even give you the IDs of available devices until you've requested a media stream. Instead you only get a single audio input and video input each with the empty string as their device ID, representing the system's default device. We can recognize this case and avoid resetting the device selection.
2024-11-19 13:26:40 -05:00
RobinandGitHub 585998cb87 Merge pull request #2800 from robintown/reactions-button
Update icon and label of reactions button
2024-11-19 10:44:58 -05:00
Robin 8ec2f9bb31 Update tests 2024-11-19 10:43:42 -05:00