* Avoid showing two chat timelines side by side after a call
In certain situations you could still end up with the chat timeline visible in the right panel in addition to the main split. For instance if you are in a call, open the chat panel, then leave the call while looking at another room, the chat panel would remain open upon navigating back to the original room.
* Avoid using flushPromises in tests
* Refactoring of DisambiguatedProfile into shared components
* correct values and refactoring
* Add username color classes to Storybook and clean up DisambiguatedProfile stories
* Refactor DisambiguatedProfileView to use class component and enhance props structure
* Refactor DisambiguatedProfile components to use member object and enhance props structure
* Update copyright year to 2026 and adjust the tests to fit the correct memberinfro interface
* Add DisambiguatedProfileViewModel class
* Refactor DisambiguatedProfileViewModel to use member object and the rest of the props
* Refactor SenderProfile to use DisambiguatedProfileViewModel and update DisambiguatedProfile styles
* Refactor DisambiguatedProfileView to enhance interface documentation
* Refactor DisambiguatedProfileView to use CSS modules for styling
* Updated css + tests to fit the new changes
* Update of the test snap to fit the current tests
* Adjusted RoomMemberTitleView and SenderProfile to use the new viewmodel, removed the old component.
* Implemented new viewmodel test for DisambiguatedProfileViewModel
* Update copyright text
* update css class names
* update to correct snapshot after css name changes.
* Apply suggestion from @florianduros
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
* Moved logic to viewmodel instead of having it in the view. Removed unessecery functions and css.
* removed unessecery file that I copied from root folder, this is no longed needed as I use the root file instead in the viewmodel
* Better Formatting
* Fix issues after merging develop
* FIxed issues with eslint
* Added Visible, non-interactive elements with click handlers must have at least one keyboard listener from eslint docs
* Updated snapshot the fit the latest update with eslint button requirment
* Update snapshot screens for new tests.
* Update tests to reflect snapshots
* Update snapshot due of outdated CSS module classes
* Add useEffect to call setProps on the DisambiguatedProfileViewModel
when props change, ensuring the view updates with the correct display
name. Update LayoutSwitcher snapshot for new CSS classes.
* Fix Playwright editing tests by adding exact match for Edit button selector
The DisambiguatedProfile refactoring added role="button" to the component,
causing the selector { name: "Edit" } to match both the user "Edith" and
the actual Edit button.
* Fix ForwardDialog location tests for async hook rendering The SenderProfile component now uses hooks that trigger async state updates.
* Fix SenderProfile useEffect to only update changeable props
* Added letter spacing
* Added ClassName prop
* Update snapshot
* Update letter-spacing
* Update snapshot screenshots
* Update Snapshots
* Update snapshot
* Removal of letter spacing to test CI
* Apply suggestion from @florianduros
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
* Added closing brackets + added back letter-spacing
* Update snapshots
* Update snapshot
* Update span to correctly apply to the CI tests, it wasn't possible to use classname as a prop
* Update snapshot
* Added comment to explain the span classNames
* DisambiguatedProfileViewModel.setProps to runtime-changing props
* replace DisambiguatedProfileViewModel setProps with explicit setters and update call sites
* Update Setters
* Prettier FIx
* Update Setters
* update DisambiguatedProfileViewModel setters and tests
* Update SenderProfile to show connect display name
* clone snapshot in setters to trigger reactive updates
* use snapshot.merge in DisambiguatedProfileViewModel setters
* emove duplicated logic in DisambiguatedProfileViewModel
* Change snapshot name
* Update viewmodel
* Updated Tests
* typo
* Update src/viewmodels/profile/DisambiguatedProfileViewModel.ts
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
* Removal of unused function
* Update snapshots
* Update tests to pass coverage
* Update Eslint
---------
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
* Switch shared-components from yarn classic to pnpm
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch element-web from yarn classic to pnpm
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch CI to pnpm
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update docs & comments
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Hold back postcss to match yarn.lock & use workspace protocol
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Tweak CI
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Rid the world of `$(res)`
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch to type=module
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix module import
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make knip happy
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update playwright imports
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make docker build happy
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove stale params
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix badly formatted logging
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch to lodash-es
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make jest happier
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch element-web to ESM
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update testcontainers imports
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix modernizr cjs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix modernizr cjs ignore files
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Move modernizr sonar exclusion to exclude everything
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update playwright tests for esm compat
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add pnpm-link utility
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Test matrix-web-i18n
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Discard changes to src/vector/index.ts
* Update playwright-common
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Use catalogs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve pnpm-link script
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Use pnpm import to regenerate lockfile from yarn.lock
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* fix: Update `globalBlacklistUnverifiedDevices` on setting change
Signed-off-by: Skye Elliot <actuallyori@gmail.com>
* fix: Use `SettingLevel.DEVICE` filter on blacklisted device watcher
* tests: Add playwright test for blacklist unverified devices toggle
* docs: Correct test step description
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* tests: Add test for local vs global blacklist unverified devices
* tests: Ensure local toggle overrides global toggle.
* tests: Add unit tests for blacklistUnverifiedDevices listener
---------
Signed-off-by: Skye Elliot <actuallyori@gmail.com>
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Fix room list not being cleared
RoomListV3 was lacking an onNotReady which meant that the room list
would sometimes not be cleared between logins.
* Fix return type
Co-authored-by: Florian Duros <florianduros@element.io>
---------
Co-authored-by: Florian Duros <florianduros@element.io>
* Extract logic for this device from DeviceListener
* Remove a listener that I assume we forgot in DeviceListener
* Use a code block for JSON in a comment
Co-authored-by: Skye Elliot <actuallyori@gmail.com>
* Rename to DeviceListenerCurrentDevice
---------
Co-authored-by: Skye Elliot <actuallyori@gmail.com>
* Move SlashCommands into slash-commands
* Move SlashCommands test prep into a function that can be re-used from multiple files
* Move slash command tests into separate files
* Fix super-linear regexes and test some more slash commands
* Move splitAtFirstSpace tests into a separate file
* Test for parseCommandString
* Make parseCommandString able to handle leading whitespace and tabs
* Implement parseCommandString using splitAtFirstSpace
* Extract emoticons slash commands into a separate file and share their code
* Add NotificationDecoration component
Add the NotificationDecoration component to shared-components.
This is a leaf component that renders notification badges and indicators
for rooms/items including mentions, unread counts, call indicators, etc.
* Add RoomListItem component
Add the RoomListItem component to shared-components.
Includes context menu, hover menu, notification menu, and more options menu.
* Add RoomListPrimaryFilters component
Add filter chips component for filtering the room list by
unread, people, rooms, favourites, mentions, invites, and low priority.
* Update VirtualizedList component
Update VirtualizedList to support the room list virtualization requirements.
* Add RoomList component
Add RoomList component that renders a virtualized list of room items.
Includes story mocks for testing.
* Add RoomListView component
Add RoomListView component that composes RoomList with filters,
empty states, and loading skeleton.
* Export room-list components from shared-components
Add exports for RoomListView, RoomListItem, RoomListPrimaryFilters, and RoomList.
Include i18n strings for room list components.
* Add RoomListItemViewModel
Add view model for individual room list items.
Manages per-room subscriptions and updates only when specific room data changes.
* Add RoomListViewViewModel
Add view model for the room list view.
Manages room list state, filtering, keyboard navigation, and child view models.
* Integrate shared components into RoomListView
Update RoomListView to use the new ViewModels and shared components.
Includes i18n string updates for element-web.
* Remove old room list implementation
Remove old ViewModels, hooks, and view components that are now
replaced by the shared-components implementation.
* Update sliding-sync playwright test
Update test expectations for new room list implementation.
* Add figma links
* Move viewModels to the right folder
* Rename to RoomListEmptyStateView
* Update VirtualizedRoomListView naming
* Update screenshots and snapshots
* Move viewmodel tests to the right location and fix some imports
* lint
* Use unknown as an Opaque type rather than any. It discourages property access within shared components and can still be cast back in EW.
* Update screenshots for new shared component rendering params
* Make room order tests deterministic
* fix: Remove state_key: null from Seshat search results
Seshat includes "state_key": null for non-state events, which causes
matrix-js-sdk to incorrectly treat them as state events. This prevents
encrypted messages from rendering properly in search results.
This fix removes the null state_key from search results and context
events before passing them to the SDK.
* test: cover local search null state_key edge cases
* test: satisfy strict types in searching coverage test
---------
Co-authored-by: David Baker <dbkr@users.noreply.github.com>
* Refactor TimelineSeparator to shared-components package
• New TimelineSeparator component in packages/shared-components/
• Updated MessagePanel.tsx to import from shared-components
* Fix copyright text
* Timeline Unit Tests + Timeline Snapshot Tests
* Imported correct timeline seperator
* Update snapshots because of css update
* Apply suggestion from @florianduros
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
* Created className prop
* Removal of element x unused css
* Update snapshot because of Flex
* Update snapshots because of Flex
* Update css to correct values and compund name
* Added letter spacing to timelineseperator
* rremoval of letter spacing
* added align center to flex to apply correct css changes
* Update snapshots to reflect new css changes
* Update snapshots to reflect css changes
* Added letter-spacing to timeline seperator
* Update snapshots after css update
* update snapshots
---------
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
* Update npm non-major dependencies
* Fix type
* Katex comes with its own types now
Or possibly it always had them but they just put them in the package.json
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: David Baker <dbkr@users.noreply.github.com>
* Move the code for running the upgrade command into its subdir
* Replace use of deprecated currentState property in runUpgradeRoomCommand
* Move upgraderoom command options into their own file
* Move upgraderoom tests into their own file and add a couple
* Move EventTileBubble to shared components as is
* Added documentation and updated stories and unit tests
* Move 'global' element web css to _common.pcss
* Adding playwright snapshots
* Updated comments
* Added legacy mx_MessageTimestamp class and updated snapshots
* Regenerate snapshots with correct hash
* Changes to css and removed timestamp from properties after review.
* Update screenshot for room-list and fix flaky CI playwright test.
* Blur the play button before matching screenshots
* Changed to button focused instead of blur for consistancy
* Stabilize play button appearance in CI (disabled due to decoding)
* Force play button appearance in CI (disabled due to decoding)
* Add comments on playwright test changes.
Change from React.RefObject<any> to Ref<HTMLDivElement> in EncryptionEvent.tsx
* Update playwright/e2e/composer/CIDER.spec.ts
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Update playwright/e2e/composer/CIDER.spec.ts
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Update playwright/e2e/crypto/toasts.spec.ts
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Add `HistoryVisibilityBadge` shared component
* Add `historyVisibility` to `RoomSummaryCardViewModel`
* Add a history visibility badge to the room info panel
* Allow roominfo panel badges to wrap
Now that we have an extra one, it's quite likely we'll have to spill onto more
lines.
* update screenshots
* Set icons in badges to be 16px
Having discussed this with the design team, the icons in badges should be 16px, not 13px,
at default font size settings.
* Add stories for all history visibility states
* fix incorrect use of useRoomState
* fix snapshots
* more snapshot updates
* Update screenshots
* Fix failure to update room info panel on joinrule change
Currently, if the join rules are updated, the room info panel is not updated
until the panel is re-rendered. This is due to a misuse of `useRoomState`.
* Update documentation and types on `useRoomState`
This hook is useless without a `mapper` function, so let's mandate it. Also
improve the documentation while we're here.
Because every room in a space will emit a notification state change
when push rules change so we would otherwise recalculate the space
notification state for every room in the space, On^2 style.
* Refactor DecryptionFailureBody to MVVM and moving it to shared components
* Added unit test for DecryptionFailureBodyViewModel
* Removing the dependency to matrix.js-sdk from the shared component
* Kepp class mx_EventTile_content for tile layout
* Required changes after rebase
* Updates after PR review requests
* Clean up unused translation tags in element-web
* Added missing unit tests to improve coverage
* Additional unit tests to improve test coverage
* Removing obsolete tests from the snap
* Only listen to verification state changes in the wrapper components and also limit the view model to only allow updates in verification state.
* Updates after review requests
* Updated and added missing playwright snapshots
* Bettter structure on view model
---------
Co-authored-by: Florian Duros <florianduros@element.io>
Co-authored-by: Zack <zazi21@student.bth.se>
* Setting up structure for the init refactoring of ReactionsRowButtonTooltip
* implemented example to follow for refactoring to MVVM
* Refactoring of ReactionsRowButtonTooltipView
* updated reactionrowbutton to use our new viewmodel and removed unessecery comments
* Updated children from reactnode to propswithchildren
* removal of children on the vm have it as a props
* implemented constructor into reactionrowbutton to use vm to viewmodel
* Removal of old component
* Added ViewModel Tests for new viewmodel
* Fix issues after merging develop
* Updated import placement for eslint failure CI
* Add tests for ReactionsRowButton ViewModel integration and click handlers to pass coverage
* Added more tests to cover all conditions
* Pass MatrixClient as prop instead of using global; replace expect(true).toBe(true) with not.toThrow()
* Added new snapshot to reflect modifications on tests
* Update images to fit the CI tests
* Optimize reactions tooltip viewmodel updates
* Removal of module.css for reactionbuttontooltip, we dont need it since we dont use any css
* Fixed snapshots to show the tooltip by introducing a boolean to set open to true in Storybook.
* Update snapshots
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Extract SasEmoji to shared-components
and improve responsive layout
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add baseline screenshots
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix e2e test
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add SasEmoji snapshot test
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add figma link
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve doc
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add new dir to crypto-web-reviewers codeowners as per ask
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Create WidgetContextMenu component in shared-components
* Modify WidgetMenuContext call (apptile, extensioncard, widgetcard), test and stories
* Correctly use new widgetcontextmenu component
* WidgetContextMenuViewModel unit test
* Lint and add comments
* Finalize widgetcontextmenuviewmodel test
* fix lint errors
* Fix test error
* Update playwright screenshots
* add userWidget in widgetcontexstmenu props
* Fix some a11y issues on playwright
* fix linter error widget card
* Use new i18n way for share component widget context menu
* Add i18n context provider for widget context menu
* chore: lint and update snapshot widgetcontextmenu
* Extract and move timestamp function
* Use new function in BaseRecencySorter
* Remove deprecated method usage
* Add jsdoc
* Avoid unnecessary exports
* Fix tests
* Show an icon in the room header for shared history
Add a decoration to the header for encrypted rooms with `history_visibility:
{shared|public}`.
Fixes: #31858
* Gate "shared history icon" behind labs flag
... since history isn't actually shared unless the flag is on
* Update snapshots
* update screenshot
* update screenshots, again
* exclude RRs from screenshot test
* Revert "Update algorithm for history visible banner. (#31577)"
This reverts commit ce9c66ba4c.
* Revert "Update prop type & documentation for HistoryVisibleBanner and VM. (#31545)"
This reverts commit 4da149e56f.
* Revert "Prevent history visible banner from displaying in threads. (#31535)"
This reverts commit c7134e8532.
* Revert "Implement UI for history visibility acknowledgement. (#31156)"
This reverts commit cff9119324.
* fix export
* Don't allow duplicate toasts.
* fix imports
* fix
* fix rel_type to be m.reference in tests
* Fix case where redactions were not longer checked.
* Ensure toastkey is calculated by the room call_id
* Ensure we fetch the call event if it does not exist locally.
* cleanup / reduce code complexity
* Add docs
* Add comment
* merge condition
* Fix ability to send rageshake during session restore failure
This fixes the specific edge case but also hardens the codepath to limit the effect of other similar edges popping up
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve coverage
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve coverage
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Extract base recency sorter class
* Create unread sorter
* Write test
* Use new sorter in RLS
* Fix incorrect sort type
* Replace with a better comment
* Fall back to RecencySorter instead of throwing error
* Upgrade matrix-widget-api to 0.16.1
* Allow Element Call widgets to receive sticky events
In an upcoming version of Element Call, the call widget will be able to operate in an experimental ‘Matrix 2.0’ mode in which MatrixRTC memberships are sent as sticky events. We already auto-approve the capability for this widget to send sticky events, but we recently decided there should be a capability for receiving them as well and need to auto-approve that too.