* Exploration of a virtuoso-powered emoji picker
moved to shared components
Fable generated
* fix pnpm lock
* format & fix some lint issues
* wrong import
* fix lint warning
* Fix off-by-one
and remove manual overflow adjustment: let's leave the default unless
it turns out to be necessary. Emoji should not take that long to load.
* Convert to functional component
* WIP: change to one big virtuoso scroller
* Change to use virtuoso's own onRangeChanged
and santitise category data and how it's passed around
* Convert Tabs to functional component
and put the focusing behaviour back with it just keeping track of
refs by itself.
* Absorb two line config file into main component
* Actually add the config to the main file
* Convert emoji to functional
Also make selected always defined and use useCallback.
* QuickReactions to functional component
* Non-default exports & doc
* Search to functional component
* Well it seems to work just fine now
* Use ref prop
* fix lockfile AGAIN
* lint
* Remove default export
* Remove some mx_ classnames and fix the inputRef
to make the arrow keys in the search box work (well, work as much as
they ever did).
* Remove last of the mx_ id / classnames
(except the one in the test)
* Use useMemo to memoize
* No need to export props interface (I think?)
and fix comment now we don't do the mutation stuff anymore
* Fix test
* Fix axe violations & add screenshots
* Avoid comparing dom snapshots in test
* Allow more before or after, just compare order of the ones present in both.
* Switch existing usages to new emoji picker
and kill the old one with fire
* Unused stuff
* Remove i18n strings
* Fix some tests
* Update screenshots
* Fix test
by removing the last of the weird memoized-but-mutated data structure
* Move the string somewhere more sensible than 'a11y'
* i18n lint
* Give the emojis IDs so aria-activedescendant works
* Fix more tests
* Add a small wrapper emoji picker component
This lets us easily memoize the recent emojis when the emoji picker is opened.
Also it saves a bit of boilerplate.
* Remove old emojipicker css
* Typos
Co-authored-by: David Langley <davidl@element.io>
* Use compound constants
* Rethemendex
* Use catalog version for emojibase
* Add comments
* More comments
* Fix comment
* More comments
* more comments (and make them uniform)
* More comments
* Fix pnpm lock again
* Another comment
* Apply button types to new version
* Add comment
* Disable screenshot
as per comment
---------
Co-authored-by: Will Hunt <2072976+Half-Shot@users.noreply.github.com>
Co-authored-by: David Langley <davidl@element.io>
* Add functionality to UIStore
- Make it possible to query if the window is currently being resized
- Emit WidthIncreased/WidthDecreased events
* Change resize behaviour of panel
So that the panel does not become smaller when the window is resized.
This is consistent with the old room-list design.
* Introduce a `CollapseHandler` object
This should be used by the collapse behaviours to collapse/expand the
panel. There's a good reason to not have the behaviours depend directly
on the react-resizable-panels API methods: We dont want the collapse/expand
calls to conflict with each other. See the comments in the code for more
information.
* Introduce a base class for collapse behaviour logic
Behaviours should extend this class to describe when the panel should
automatically collapse and expand.
* Add the window resize collapse behaviour
* Create a central file from which to export all behaviours
* Add a class to orchestrate the collapse behaviours
ResizerViewModel will only have a dependency on this class.
* Collapse panel on app start if necessary
For eg, if the app is started with a small window width, the panel should be
collapsed.
* Wire auto collapse code into the viewmodel
* Write jest tests
* Fix e2e tests
* Fix lint error
* Fix e2e test failures
* Expand the panel before taking screenshot
Fixes incorrect narrow screenshots in RTE.spec.ts and CIDER.spec.ts
* Make comments consistent
* Move tests from jest to vitest
* Fix lint errors
* Improve comment
* Remove variable
* Remove mock
* Fix comment formatting
* Make the text copy button use IconButton
This obviously should be a shared component, but design is looking at
what it will actually look like long term, so until then, let's at
least make it use compound's IconButton so it gets the hover background
state, and sort out the padding & margins.
Requires https://github.com/element-hq/compound-web/pull/528
* snapshots & add aria-label
* more snapshots
* Remove unnecessary width & height
update other screenshots with expected changes
* One more screenshot
* This really shouldn't be necessary: see what test fails
* Fix test to look in screen for the labels
Because the labels from the tooltip don't go in the container, they
get added to the dom at the top level in a floaty bit.
* update snapshots again
* Fix button size
and also add comment to the other place where we fudge the padding
* Update snapshots
* Align to center
* Screenshots
* Add user status to dm room header
Also bumps the gap on the room header items to 8px because that's
what the designs have and I'm assuming it applies to everything, not
just the user status: pending design confirmation.
* Turns out the icons did have 8px gap
but via 4px of padding for reasons I can't discern
* Adjust spacing to 1.5x
as requested by design
* add tests
* Update screenshots
* add test for user status updating
* Change `feature_group_calls` to default to true.
Change state to Beta
* Add `enableLegacyCallsVoip` (clarify: Audio settings relate to Legacy)
Change `element_call.use_exclusively` to just be the default of
`enableLegacyCallsVoip`.
Allow disabling in Legacy in the settings. (overwrite `use_exclusivly`
via `enableLegacyCallsVoip`)
Rename `Voice & Video` to `Legacy Voice & Video`
* improvements
- settings title update to only show legacy when appropriate
- hide menu all together if use_exclusivly is chosen
* simplify by removing the feature_group_calls flag
* smaller cleanup
* fix tests and cleanup
* clarify settings (disable) in config.md
* add back EC relevant settings in room settings dialog
* update screenshots (now default to EC enabled (not disabled)
-> show voice and video tab in room settings
* update screenshots
* always show option to control voice messages input
* lint
* fix test
* disable -> enabled And only have on mic dropdown
* update config.md
* Back to `disabled` (on by default/no config)
* remove element call hint from voice-video settings
* Update apps/web/src/i18n/strings/en_EN.json
Co-authored-by: Robin <robin@robin.town>
* Update apps/web/src/components/views/settings/tabs/user/VoiceUserSettingsTab.tsx
Co-authored-by: Robin <robin@robin.town>
* review
* cleanup element call url setting (its deprecated/not used anymore)
* clarify, that also jisti will be enabled/disabled by legacy settings
flag
* remove double section
* remove unn exassary element_call configurations
* Update en_EN.json
* Update VoiceUserSettingsTab.tsx
* Make tests use new defaults (enable element call)
* Default events power levels
* format
* review "Enable Legacy voice/video calls" label
* more radical usage of defaults in element_call config.json's
* Update config.json
* Update en_EN.json
* Update RoomSettingsDialog-test.tsx.snap
* Update useRoomCall.tsx
* fix imports
* Update request permission promp to latest designs:
https://www.figma.com/design/aOEkaJtaBmPy058V7uoqVr/Element-Call-Updates---2026?node-id=45-12591&t=7takL39icZwt9YjL-0
* Update config.json.d.ts
* fix usage of `Element` in i18n
* Update General-room-settings-tab-should-be-rendered-properly-1-linux.png
---------
Co-authored-by: Robin <robin@robin.town>
* Add new settings to enable/disable the sections
* Add `RoomList.showSections` settings to preference user settings
* Hide sections ui in room list header
- Hide the collapse/expand button and the *new section* entry in the
menu.
- Display the *start chat* button instead of the compose menu when the
only action available is to create a DM
* Hide sections ui in context menu of room item
* Listen to show section settings in room list item vm
* Listen to show sections setting in room list header vm
* Put all the rooms inside the chat section when sections are disabled
When the chat section is the only section, the room list is in "flat
list mode". Putting all the rooms inside the chat section.
The section filters (aka custom section, favourites etc) are not passed
to the skip list.
* Update preferences settings screenshot
* Add e2e test for RoomList.showSections toggle
* Hide "Chat moved" toast when a room is tagged when RoomList.showSections is disabled
* First stage
1. Make avatar BIGGER!
2. Move status button out to its own component so we can reuse it
* Working version
but using context menu rather than dropdown menu which almost looks
right but not quite.
* Commit the set status view component
* Change to use dropdown with custom trigger
* Show full set status component in user menu
and styling tweaks
* In user menu, clicking takes you to settings
* Add the view model
* oxfmt
because apparently mine had decided to go away
* Fix type import
* Pass set status viewmodel in story
* Bump compound-web
for customisable dropdown
* Snapshot
* Add explicit aria label
as combobox role things don't just inherit from their inner text
* snapshot again
* Only show user status if feature flag enabled
* Make status btton view not a button
because it doesn't need to be. Also rename accordingly.
* Screenshots
* Disable in settings if feature flag off
* Snapshot
* Snapshot again
* Update screenshots
including room settings one which wasn't really supposed to change
although the avatar now takes up the space it's in - leaving it for
design to check.
* Fix size & positioning of the status button
* Update screenshots
* Screenshots
* Test for SetStatusViewModel
* Update set status view on status change
* Use a link component for the status button
which has built in hover state
* Float the status button in a 28px container
vs making it actually 28px min height
* Separate user menu profile into two sections
With 8px gap between things in the two sections and 12px gap between
sections (ie. in practice, 12px gap between the status control and username).
* Screenshot
* Screenshots
* Pass set status view model in the state
rather than as an extra prop. Fixes it in the story too.
* Pass ownprofilestore into the viewmodel
* Don't use snapshot for testing the view model
Avoids getting all the random stuff from the sub VM in the snapshot
and better to test what we care about anyway.
* don't mention the bad word
* Here too
* Don't show user status for guests
* Update guest story to remove user status
* Update to compound-web 9.7.0
* Update snapshots for compound-web 9.7.0 toast markup
The 9.7.0 Toast moves typography classes from .toast-container to .content
and rebuilds CSS-module hashes, so the RoomListToast unit snapshots, the
storybook visual baselines, and the room-list e2e screenshots needed
regenerating.
* Update blurhash screenshot
* Revert "Update blurhash screenshot"
This reverts commit 6eacecc1ed7459f6d34ac59313f85b467ab3e52c.
* Removing the wierd blue border color when focused + adjusted the border to show when squeezed at the end of border
* Update snapshots
* Update edited code block screenshot
* Poll for storage being deleted in OIDC test
This was flaking due to logout being async and sometimes not finishing
by the time the dialog appeared.
* Add missing screenshot
* Remove border from roomlist container
The separator will act as the border so we no longer need the roomlist
border.
* Use pointer events to detect click event
Otherwise the onClick handler would run when you resize the panel.
* Support showing the border in separator
* Update tests
* Disable double click behaviour on separator
* Fix screenshot tests failing
* Clean up unused app/web styling for ReactionsRow
* Align shared Storybook theme root with app/web
* Move PlayPauseButton styling into shared component
* Use closest compound icon color for all crypto events in both app/web and Storybook
* Updated snapshot
* Experimental strict color matching threshold for playwright
* Experimental color matching threshold for playwright
* Revert color matching threshold for playwright to the default value
* Updated screenshots after matching icon size in audio player with other media body components
* Changed icon color for crypto events accroding to recommendation from the design team
* Use --cpd-color-icon-primary for all crypto events
* Updated snapshots and screenshots after icon color changes
* Updated app/web snapshots and screenshots
* Tweak new user menu design
* Update screenshots
* More screenshots
* Add story with no avatar
* add story to test
* Expand the menu so it actually shows what it's supposed to show
* Use the open parameter
which is the param to open the menu
* snapshot
* Add test for normal open menu version
* Move menu to the right of the avatar
and make it appear on top of the display name
* Fix user menu layout
* screenshots
* snapshot
* screenshots
* more screenshots
* Shift toasts to the left slightly
So they completely cover the display name of the user menu when
it's expanded. Also down slightly so they're level with the user menu.
* Tweak toast border radius & position
to match & sit on top of the user menu
* Close toasts in cider tests
* Only close the toast if it's actually there
* Fix some toasts to be dismissed & update screenshots
more to come though
* Make closeKeyStorageToast actually optional
* Fix some more toasts & races
* Screenshots again again (again)
* More screenshots
* Convert to rejectToast
* Fix toast rejectors to not wait and update screenshots
* Apparently 1ms is not long enough
* Initial reword of upload to MVVM.
* Update tests
* More incremental improvements
* Refactor tests to use helper method for composer uploads.
* Add drag and drop tests
* lint
* Add commentary
* fixup test
* More precise selector
* Retarget uploads
* lint
* fixup
* one more type
* update snap
* Fixup composerUploadFiles
* fix import
* lint
* Copy and paste fixes too
* Add tests for pasting
* Add tests for pasting files.
* Remove redundant fn
* rm comment
* tidy up
* Test cleanup
* More clean up
* another fix
* Begin fleshing out
* Park changes
* More stuff
* Use condensed version
* Cleanup tests
* more cleaning
* last bity
* Add a test for the composer
* Park up changes
* Rewrite Measured to be a functional component
* Add tests to cover narrow viewports
* lint
* breakpoint is optional
* Cleanup
* Support narrow mode
* fixup
* begone
* Provide default value
* add label
* fixup test
* update copyright
* cleanup
* Be a bit more lazy with FileDropTarget
* remove a debug statement
* Fixup
* fix two snaps
* Update screenshot
* and the other one
* Update snaps
* unfake CIDER
* update screens again
* remove extra test
* Undo accidental snapshots
* Bit of tidyup
* fixup
* even more tidyup
* may drag and drop file
* tidy up again
* snap snap snap
* Use load to make sonarQube happy
* Bunch of refactors
* More cleanup
* cleanup debug code
* tweaks
* remove a test we no longer need
* make it happy
* fix import
* fixup
* Update snaps
* typo
* one off
* Add tests
* lint
* remove only
* Reduce screenshot scope
* fix snapshot usage
* cleanup
* Rewrite Measured to be a functional component
* Add tests to cover narrow viewports
* lint
* breakpoint is optional
* Cleanup
* Provide default value
* Fixup
* fix two snaps
* Update screenshot
* and the other one
* unfake CIDER
* Update snaps AGAIN
* chore: add dnd kit deps
* chore: patch dnd kit to fix ts error
* feat(sc): add drag-and-drop to room list item and wrapper
* feat(sc): make the room list header a droppable element
* feat(sc): add dnd to room list view
* feat(tags): can tag room as CHAT
* feat(vm): implement `changeRoomSection`
* feat(sc): disable dragging in flat list
* fix: disable keyboard navigation when dragging element
* test(sc): update snapshots
* test(sc): add dnd test
* test(e2e): add e2e tests for room drag and drop
* test(vm): add tests for changeRoomSection
* fix: remove focus visible when dropping with the mouse
* test(playwright): update existing screenshots
* chore(sc): move numbers out of main build
The Ew RecorderWorklet imports shared component bundle. However if the
bundle uses some deps using document/window which, the worklet will not
work.
The solution is to put the used functions into a separate bundle.
* doc(sc): add subpath import into README
* doc: typo barrel/bundle
* test: improve test expect
* refactor: add utils to section tag
* fix: incorrect check in tagRoom
* fix: add doc about dndkit tunning
* Make sure action bar is not visible when using up/down arrows during editing
* Add a temporary mouse move listener to handle tooltips stealing onMouseLeave events
* Better naming, add comments and test
* Fix test that performs its own hover/pointer movement before clicking.
* Fix playwright test that actually displayed a message time stamp when hover state was stale
* Fixes after merge
* Update button in incoming call toast to say 'Decline'
Rather than 'Ignore'. This change has been agreed with design since 'Ignore' did not properly communicate that clicking the button would inform the caller that you deliberately rejected their call.
* Update incoming call toast screenshots
* Initial quick settings menu
* Total refactor
* Quick design fixes.
* Refactor to use a view model.
* Remove unused strings
* Apply label
* Refactor naming
* Fixup most tests
* Remove specific theming for old user menu
* prettier
* Lots of cleanup
* Allow overriding the menu classes
* update snap
* Oops translations
* tidy
* Cleanup guest flows.
* Copyrights
* Remove unused classname
* Match guest view to designs
* Add guest screenshots
* Update guests
* snapshot
* Cleanup
* fix import
* Update tests
* More sceenshot fixes
* update collapsed
* move statements to prevent flake
* update snap
* Kick it along
* Click the room list
* Fiddle with the room video list.
* More screenshot adjustments
* fix imports
* fix another import
* Update snaps
* update snaps
* Fix snap flakes
* Refactor to move actions to view component, and callbacks to Actions
* Cleanup
* Cleanup
* Cleanup
* invert auth
* More bits
* fix
* Change md buttons to sm
* Try to assemble the snapshot component of the house of cards
* Consistent newlines between tests
* Update snapshot
Not sure why this was like this, this seems consistet for a logged in user
* Update snapshot
again these seem sensible for a guest
* Remove test
I don't really understand why the thing it asserts matters, so I'm removing
it for now.
* Update snapshot
* screenshot
* Don't show profile picture for guests
I'm not really sure what it meant for this interface to have a
property with a default value, so I've removed it and added the
property to the view model.
* Show avatar in story
* update snapshots for showAvatar
* Update screenshots
& hopefully make hover consistent in one
* Use outline home icon
---------
Co-authored-by: David Baker <dbkr@users.noreply.github.com>
* Layer Compound and shared component CSS
* Layer app theme CSS
* Remove !important flags from ActionBarView
* Remove unnecessary !important statements from shared components
* Avoid dead code errors for *.pcss just because layer is specified after @import url
* Remove unnecessary !important styling
* Override Banner defaults in RoomStatusBarView
* Updated snaps
* Updated snaps
* Fix styling of media body in app/web
* Fix styling for Compound anchors
* Fix styling issues in app/web
* More styling fixes
* Fix a problem extracting css for HTMLExport
* Revert changes
* Fix for theme styling
* Add test to improve coverage
* Prettier
* Fix styling issues
* Add data-kind attribute to avoid global styling override
* Update screenshot that now is correct
* Revert data-kind attribute
* Handle LinkPreview styling in .pcss
* Fix flaky test: Avoid racing the lazy-loaded ManageEventIndexDialog
* Take care of review comments
* Updated snaps
* Updated snaps again after merge
* Remove !important from RoomStatusBar
* Update design of incoming call notifications
* Make toast show avatars of group call participants
* Further expand test coverage for call notifications
* Update screenshots
* Update screenshots
* Delete unused variables
* Upgrade Element Call to v0.19.2
For the new group call intents.
* Consolidate some branches
* Apply Compound spacing variables a little more
* Fix lints
* Exclude Element Call assets from being re-minified to fix build