Commit Graph
100 Commits
Author SHA1 Message Date
Valere 0dca5835f6 Route Element Call's DOM decoration through an injectable root element
Element Call writes its theme classes, background and layout attributes
straight onto document.body, and portals its modals there too. That is
only correct while it owns the page; embedded in a host application it
has to confine itself to the container it was mounted into.

Add a RootElementContext, defaulting to document.body so that the
standalone and widget builds are unaffected, and point the theme classes,
data-background, no-scroll-body and the fullscreen target at it.

Give the Modal and Toast portals an explicit container as well. Radix and
vaul both default to document.body, so without this every modal, drawer
and toast would render outside the container and lose the theme and
platform attributes set on it.

No functional change: the root element is document.body until an embedder
provides otherwise.
2026-09-01 18:54:27 +02:00
Valere 0a8c24bca8 Allow the config to be supplied by an embedder
Config.init() derives the location of config.json from window.location,
which only makes sense while Element Call owns the page. When it is
embedded in a host application the host owns the configuration, so add
Config.initWith() to accept it directly.

Share the defaulting and validation between both paths via resolveConfig(),
so that an injected config behaves identically to a fetched one, and mark
initialization as complete so that the init() calls already on the startup
path resolve immediately instead of fetching over the top of it.

initDefault() becomes initWith({}), which also stops it handing out a
shallow copy of DEFAULT_CONFIG whose nested objects were shared with the
module-level default.
2026-09-01 18:40:53 +02:00
Valere 7485b3d71f Use a dedicated i18next instance instead of the global singleton
Element Call configured the global i18next singleton. When Element Call
runs embedded in a host application rather than as its own page, that
singleton belongs to the host, so configuring it would clobber the
host's translations.

Create Element Call's own instance in utils/i18n.ts, configure it in the
initializer, and pass it to components via <I18nextProvider>. Drop
.use(initReactI18next) from the initializer: it registers the instance
as react-i18next's global default, which is the global we are trying to
avoid. Tests and stories keep using it, so that they do not need to wrap
every render in a provider.

Two modules imported `t` directly from "i18next" and so were bound to
the global instance: utils/errors.ts now calls i18n.t() on the instance
(reached at call time, since i18next only assigns `t` during init), and
QrCode uses useTranslation() like every other component.

No functional change.
2026-09-01 18:30:05 +02:00
Valere 9d5ca297e3 Remove well-known discovery 2026-08-05 16:12:41 +02:00
Valere e1bc4a096b fix: FF mirrored self video lose rounding 2026-07-31 12:20:32 +02:00
Valere ffb6b0a5f6 Use rtc transport action with widgets 2026-07-30 10:43:09 +02:00
Valere 53ae78c609 break ratio when tile bigger than screen 2026-07-27 17:25:56 +02:00
Valere b046c4b569 fix: Safari preview tile no video is 16px wide only 2026-07-27 15:43:35 +02:00
Valere 41d0933d4d playwright: New toast 2026-06-25 15:55:08 +02:00
Valere dc5b541b21 fix(voice): Default to earpiece for voice only call 2026-06-25 13:10:27 +02:00
Valere 62a3ec8319 review: cleanup removed redundant default properties 2026-06-05 12:50:25 +02:00
Valere a430e87104 review: add test for busy behavior for Mic and Video buttons 2026-06-05 12:48:04 +02:00
Valere acc5a440c7 review: remove unneeded early return 2026-06-05 12:35:21 +02:00
Valere dc03d9b358 fix: Initial unmute is reverted 2026-06-05 10:29:36 +02:00
Valere 55b2537129 fixup: Update snapshot with button busy state 2026-06-04 19:14:12 +02:00
Valere b5b238ffd3 storybook: Add storybook for audio/video busy 2026-06-04 19:13:27 +02:00
Valere 4606373e5b feat(mute): add syncing state and disable toggle during async mute 2026-06-04 18:55:31 +02:00
Valere 4353f09e54 fixup snapshots 2026-06-04 15:48:30 +02:00
Valere c05c523182 fixup: ensure dynamic keys are extracted by i18n parser 2026-06-04 15:30:59 +02:00
Valere e7d37f87bb feat(errors): Report livekit as such rather than like unknown errors 2026-06-04 11:54:42 +02:00
Valere 3799ea2b4e fixup: Missing translation 2026-05-28 14:43:42 +02:00
Valere 2bd16beccf Merge branch 'livekit' into valere/improve_error_message 2026-05-28 14:27:17 +02:00
Valere 6777adac54 Merge branch 'livekit' into valere/devx/run_dev_on_phone 2026-05-28 13:17:22 +02:00
Valere 1fafc3b1ba Merge branch 'livekit' into valere/devx/livekit_logs 2026-05-28 12:45:39 +02:00
Valere 2928e34ee2 test: use toHaveCount instead of count()).toBe 2026-05-28 11:56:29 +02:00
Valere d98e800077 bump playwright
update playwright container image
2026-05-28 11:32:18 +02:00
Valere 8b86c1914d bump playwright
update playwright container image
2026-05-28 11:31:38 +02:00
Valere e815277fa2 touch commit to unbock gh 2026-05-28 08:59:05 +02:00
Valere 810e263cbe review: better doc 2026-05-28 08:51:00 +02:00
Valere 70a0914017 eslint 2026-05-27 14:18:34 +02:00
Valere 8011f2579c test: Add test for new option
review: Remove uneeed {" "}
2026-05-27 14:03:31 +02:00
Valere 187665748b Merge branch 'livekit' into valere/devx/livekit_logs 2026-05-27 11:46:38 +02:00
Valere 265781ea5e fix(regression): control buttons should be hidden on mobile PIP 2026-05-20 13:08:51 +02:00
Valere 1865110492 reproduce bug internal #578
Regression: Controls are shown in Mobile PIP
2026-05-20 13:08:11 +02:00
Valere dfbb6c770e devx: Allow to run local dev EC on mobile in same wifi 2026-05-18 13:25:56 +02:00
Valere 408a38a7d6 bugfix: When starting muted, have to click twice to unmute in call 2026-05-12 15:46:38 +02:00
Valere f1b61a9f1c update developer settings tab snapshot 2026-05-11 18:07:40 +02:00
Valere 2ac221661b review: Use Initializer instead of creating a component 2026-05-11 17:43:34 +02:00
Valere 25ac565f8b Merge branch 'livekit' into valere/devx/livekit_logs 2026-05-11 17:28:07 +02:00
Valere d0bfef0682 Improve error messages for sfu auth problems 2026-05-07 16:21:30 +02:00
Valere e06f717156 playwrigth: make dismiss toast more reliable 2026-05-07 11:23:59 +02:00
Valere 09fc38930f fixup 2026-04-30 17:07:13 +02:00
Valere e79255e23b fix accept call with latest web 2026-04-30 16:47:52 +02:00
Valere 3bc8c0590d dev-tool: Add option to enable extended livekit logs 2026-04-24 18:27:05 +02:00
Valere 2f2bdfce5b fixup: wrong skip 2026-04-24 12:32:41 +02:00
Valere 82b7e243eb This test does not need to run on both FF and chrome 2026-04-24 12:10:24 +02:00
Valere 0d5c71bb4e fixup 2026-04-24 11:29:34 +02:00
Valere 0864b7d828 Merge branch 'livekit' into valere/devx/use_synapse_api_for_playwright 2026-04-24 11:25:10 +02:00
Valere ca305b9da1 fix: wrong usage of poll 2026-04-24 11:24:00 +02:00
Valere 6317a06472 review: quick cleaning 2026-04-24 11:21:14 +02:00
Valere 3699138eaa Dismiss the new invite confirmation modal 2026-04-23 15:36:46 +02:00
Valere a7788a2bfa Dismiss the new invite confirmation modal 2026-04-23 11:33:52 +02:00
Valere d9dc61a49d mark test as slow 2026-04-23 09:50:01 +02:00
Valere 84ac0cc47d mark test as slow 2026-04-22 20:56:42 +02:00
Valere e5c11eee13 fix bad assert for reconnect 2026-04-22 20:27:30 +02:00
Valere 6edc4084c6 adjust timeouts 2026-04-22 20:16:59 +02:00
Valere 6d70247acb this test should be slow (taking more than 30s) 2026-04-22 20:13:00 +02:00
Valere 21b78d6dad test something in the reconnect bug 2026-04-22 19:30:15 +02:00
Valere 4d8e4c66eb adjust time out 2026-04-22 19:30:02 +02:00
Valere 78e7adc4c6 remove redundant toBeVisible before click 2026-04-22 18:49:51 +02:00
Valere 5c4d6d0317 turn an assertion as retryable with expect.poll 2026-04-22 18:06:24 +02:00
Valere 1b9682869a adjust timeouts 2026-04-22 17:25:14 +02:00
Valere 854cfdfe1b adjust timeouts 2026-04-22 16:51:04 +02:00
Valere f355aa1ed7 adjust timeout 2026-04-22 15:40:06 +02:00
Valere 879526ce5e adjust flaky timeouts 2026-04-22 15:17:40 +02:00
Valere 5dd1c76d1c increase timeout of flaky test 2026-04-22 14:42:35 +02:00
Valere f9dc4d9b82 Update a tohaveCount() timeout that made a test flak 2 times 2026-04-22 14:14:54 +02:00
Valere 2d9802b6f5 Merge branch 'livekit' into valere/devx/use_synapse_api_for_playwright 2026-04-22 12:10:28 +02:00
Valere 55de3fd216 tests optimizations 2026-04-22 09:03:57 +02:00
Valere 0e2d2c6f72 try paralelize registrations? 2026-04-21 18:36:40 +02:00
Valere 754a42ffd1 increase default timeout on huddle test 2026-04-21 18:14:51 +02:00
Valere 701edd9522 fixup lint 2026-04-21 17:54:10 +02:00
Valere 0127040a8c Remove slow? no registration anymore 2026-04-21 17:51:42 +02:00
Valere 24e721f572 fix web stuck problem! go to / and not to #/login 2026-04-21 17:51:42 +02:00
Valere 4211405e7b Use synapse API to register instead doing via UI 2026-04-21 17:51:42 +02:00
Valere 84ed5943ea fix: using vars. instead of secrets. for NETLIFY_SITE_ID 2026-04-21 11:55:03 +02:00
Valere 8b4762fb29 review: use role locator instead of testID 2026-04-17 17:29:35 +02:00
Valere eeafd81d31 test: add a screenshare test 2026-04-17 14:58:10 +02:00
Valere 29ba0bdf13 make zizmore happy with exact version in comment 2026-04-15 14:13:58 +02:00
Valere 0350f57275 fixup: Looks like the upload & download action used are not compatible 2026-04-15 14:01:26 +02:00
Valere 7871877863 bump livekit server version 2026-04-15 11:27:13 +02:00
Valere 68518e323e Skip NotAllowed test until livekit allows to detect that again 2026-04-15 10:28:19 +02:00
Valere 07e3dc1ca4 Update livekit to 2.18.1
Fix mocking in a test
Also add "skipLibCheck": true in tsconfig
2026-04-13 10:02:54 +02:00
Valere dbeae383eb update livekit again 2026-04-13 09:35:08 +02:00
Valere 208184909e fixup: prettier 2026-04-10 10:08:57 +02:00
Valere aea5815dab Ensure we don't publish to any transport until our own transport is ok 2026-04-10 09:24:34 +02:00
Valere 0f14da7fbb devx: Use new action to netlify the playwright report as EW is doing 2026-04-09 16:33:26 +02:00
Valere 40dacd523b review: Move the all advertised/active down to the LocalMember
And let the local member use it properly to send membership event and publish media
2026-04-09 15:22:10 +02:00
Valere 08006d640a fix: Ensure to publish on the correct transport 2026-04-08 11:10:27 +02:00
Valere 58d377c3f7 test: Add publishing bug reproduction test 2026-04-08 11:06:05 +02:00
Valere 9fe35ba822 Add back the patch to avoid reconnect glitch 2026-04-03 19:08:52 +02:00
Valere a89d231858 review change comment to proper doc 2026-04-03 18:51:14 +02:00
Valere 6d99450d81 review: Remove un-needed initial value for behavior 2026-04-03 18:46:49 +02:00
Valere 3d286e8ab4 revert workaround for widget permission dialog, not needed anymore 2026-04-03 09:45:59 +02:00
Valere b1f84a34a8 remove dead commented code 2026-04-02 20:42:09 +02:00
Valere 95eb8943af fixup test: Errors are now wrapped in user readable error
and proper fetchmock for doNetworkOperationWithRetry
2026-04-02 19:05:24 +02:00
Valere b5be123953 fix uncaught errors in tests 2026-04-02 16:53:51 +02:00
Valere 90bfaecd13 refact: step 2 - break down old membership local transport logic 2026-04-02 16:53:51 +02:00
Valere 4cecdda955 refact: step 1 - extract oldest membership transport into new function 2026-04-02 16:53:51 +02:00
Valere 869bab8253 fixup test since usage of doNetworkOperationWithRetry
doNetworkOperationWithRetry requires to properly mock the get_token endpoint, whereas retryNetworkOperation didn't require it.
2026-04-02 16:53:51 +02:00