* Remove radio component
* "Voice room" → "video room"
* Remove interactivity from video room tiles
* Update connection state when joining via widget
* Simplify room header buttons for video rooms
* Split out video room creation into a separate menu option
* Simplify room options for video rooms
* Update video room tile layout
* Tell the Jitsi widget whether it's a video channel
* Update tests
* "Voice" → "video" in more places
* Fix tests
* Re-add frame to immersive Jitsi widgets
* Comment ack
* Make updateDevices more readable
* Type FacePile
* expose wire errors in more useful way
* add wire error state to room live share warning bar
Signed-off-by: Kerry Archibald <kerrya@element.io>
* stylelint
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add types to getLabel helper
Signed-off-by: Kerry Archibald <kerrya@element.io>
* display live share warning only when geolocation is happening
Signed-off-by: Kerry Archibald <kerrya@element.io>
* kill beacons when geolocation is unavailable or permissions denied
Signed-off-by: Kerry Archibald <kerrya@element.io>
* polish and comments
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Add utility for getting connected voice participants
* Allow voice room members to send connected device state
* Update connected devices when connecting/disconnecting voice
* Show voice room participants in room tile when not connected
* Update voice room tests
* Add null types and guards
* Remove deprecated feature_communities_v2_prototypes
* Update _components
* i18n
* delint
* Cut out a bit more dead code
* Carve into legacy components
* Carve into mostly the room list code
* Carve into instances of "groupId"
* Carve out more of what comes up with "groups"
* Carve out some settings
* ignore related groups state
* Remove instances of spacesEnabled
* Fix some obvious issues
* Remove now-unused css
* Fix variable naming for legacy components
* Update i18n
* Misc cleanup from manual review
* Update snapshot for changed flag
* Appease linters
* rethemedex
* Remove now-unused AddressPickerDialog
* Make ConfirmUserActionDialog's member a required prop
* Remove useless override from RightPanelStore
* Remove extraneous CSS
* Update i18n
* Demo: "Communities are now Spaces" landing page
* Restore linkify for group IDs
* Demo: Dialog on click for communities->spaces notice
* i18n for demos
* i18n post-merge
* Update copy
* Appease the linter
* Post-merge cleanup
* Re-add spaces_learn_more_url to the new SdkConfig place
* Round 1 of post-merge fixes
* i18n
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Add voice room labs flag
Signed-off-by: Robin Townsend <robin@robin.town>
* Add more widget actions for interacting with Jitsi
Signed-off-by: Robin Townsend <robin@robin.town>
* Factor out a more generic Jitsi creation utility
Signed-off-by: Robin Townsend <robin@robin.town>
* Add utilities for managing voice channels
Signed-off-by: Robin Townsend <robin@robin.town>
* Enable creation of voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Force a maximized view of voice channel widgets
Signed-off-by: Robin Townsend <robin@robin.town>
* Add voice channel store
Signed-off-by: Robin Townsend <robin@robin.town>
* Factor out a more generic FacePile
Signed-off-by: Robin Townsend <robin@robin.town>
* Implement room tile changes for voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Add interactive radio component to the left panel
Signed-off-by: Robin Townsend <robin@robin.town>
* Test voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Update name of call room type
Signed-off-by: Robin Townsend <robin@robin.town>
* Clarify that voice rooms are under development
Signed-off-by: Robin Townsend <robin@robin.town>
* Use readonly
Signed-off-by: Robin Townsend <robin@robin.town>
* Move acks to the end of handlers
Signed-off-by: Robin Townsend <robin@robin.town>
* Add comment about avatar URLs coming from Jitsi
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't use unicode ellipses
for translation reasons?
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix tests
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix tests, again
Signed-off-by: Robin Townsend <robin@robin.town>
* Remove unnecessary export
Signed-off-by: Robin Townsend <robin@robin.town>
* Ack Jitsi events when we wait for them
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix emoting with emoji or pills
* Fix some slash command errors not being shown
* Re-enable mistakenly skipped SendMessageComposer tests
* Test emoting with non-text parts
* Document and support the established naming convention for config opts
This change:
* Rename `ConfigOptions` to `IConfigOptions` to match code convention/style, plus move it to a dedicated file
* Update comments and surrounding documentation
* Define every single documented option (from element-web's config.md)
* Enable a linter to enforce the convention
* Invent a translation layer for a different change to use
* No attempt to fix build errors from doing this (at this stage)
* Add demo of lint rule in action
* Fix all obvious instances of SdkConfig case conflicts
* Fix tests to use SdkConfig directly
* Add docs to make unset() calling safer
* Appease the linter
* Update documentation to match snake_case_config
* Fix more instances of square brackets off SdkConfig
* Don't assume that widget IDs are unique
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't remove live tiles that don't exist
Signed-off-by: Robin Townsend <robin@robin.town>
* Add unit test for AppTile's live tile tracking
Signed-off-by: Robin Townsend <robin@robin.town>
* Paginate responses to pinned polls
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pinned polls display paginated responses
Signed-off-by: Robin Townsend <robin@robin.town>
* Test basic pinned message functionality
Signed-off-by: Robin Townsend <robin@robin.town>
* Test pinned polls
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix test
Signed-off-by: Robin Townsend <robin@robin.town>
* Add unexposed account setting for hiding poll creation
This is to match the sticker picker setting we already have, but not exposed in the user settings until we decide if we actually want it to be there.
This is primarily intended to be used in environments that disable it at the config level, though given there's multiple people in the wild who have asked for this, it seems reasonable to expose it as a hidden setting instead. Note that as of writing it's not clear if any of those requests made it as far as an issue tracker.
Typically for the usecase presented we'd add a new UIFeature flag, however this *feels* wrong for the case at hand.
* Move visibility check way higher
* Fix i18n post-merge
* Hide unpinnable pinned messages in more cases
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix typo
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that unpinnable pinned messages get hidden
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix cli.relations error in test
Signed-off-by: Robin Townsend <robin@robin.town>
* Use event: true shortcut when calling mkEvent
Signed-off-by: Robin Townsend <robin@robin.town>
* Use mockResolvedValue instead of mockReturnValue for async mock
Signed-off-by: Robin Townsend <robin@robin.town>
* Actually mock redacted messages correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Ensure that panel is updated before assertions are made
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pinned messages reflect edits correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix warning about missing date
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix lint
Signed-off-by: Robin Townsend <robin@robin.town>
* Hide unpinnable pinned messages in more cases
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix typo
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that unpinnable pinned messages get hidden
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix cli.relations error in test
Signed-off-by: Robin Townsend <robin@robin.town>
* Use event: true shortcut when calling mkEvent
Signed-off-by: Robin Townsend <robin@robin.town>
* Use mockResolvedValue instead of mockReturnValue for async mock
Signed-off-by: Robin Townsend <robin@robin.town>
* Actually mock redacted messages correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Ensure that panel is updated before assertions are made
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
Fix https://github.com/vector-im/element-web/issues/21262
Optimizations:
1. Don't update the `style` (positioning) of hidden tooltips
1. Don't add DOM elements to the page for hidden tooltips
> ## Performance problems broken down
>
>
> ### Hidden tooltips rendering on `scroll`
>
> You can see that the Tooltip render is attached to the `scroll` event at [`src/components/views/elements/Tooltip.tsx#L78-L81`](31f0a37ca2/src/components/views/elements/Tooltip.tsx (L78-L81))
>
> The rendering calls [`src/components/views/elements/Tooltip.tsx#L101` -> `updatePosition`](36adba101c/src/components/views/elements/Tooltip.tsx (L101)) which ends up as an expensive "Recalculate Style" because it uses [`Element.getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). This happens many many times within a single `scroll` event. Probably once for each tooltip within the room list **even though no tooltips are event visible as I scroll**. I can see that we're just updating the `style` attribute for a bunch of `.mx_Tooltip_invisible` elements at the end of the document.
>
> Each one of the purple spans below the `scroll` span ends up as a call to `updatePosition`. And a `scroll` event takes 35ms to 60ms to complete which is way over the 16.6ms 60 FPS budget (on a powerful desktop PC), granted these times are with the performance profiling running. This is without the Passbolt extension explained below.
>
> And the room list contains about 141 rooms (`document.querySelectorAll('.mx_RoomTile').length`):
>
> ![](https://user-images.githubusercontent.com/558581/156273551-e744d3d6-93c6-4b07-bb12-6aad361f96a2.png)
>
>
>
> ### Passbolt Chrome browser extension exacerbates the problem
>
> In order to login to Passbolt, it requires a browser extension which defaults to mucking up all pages:
>
> <img src="https://user-images.githubusercontent.com/558581/156275644-bc26b1f5-5d99-4eae-b74b-c2028f2f1baf.png" width="300">
>
>
> The extension source seems to be available: https://github.com/passbolt/passbolt_browser_extension
>
> The Passbolt Chrome extension has a `MutationObserver` listening to all attribute and element changes to the whole `<body>` of the `document` so it can `findAndSetAuthenticationFields` (find form elements and autofill).
>
>
> [`passbolt/passbolt_styleguide` -> `src/react-web-integration/lib/InForm/InFormManager.js#L143`](1c5eddc910/src/react-web-integration/lib/InForm/InFormManager.js (L143))
> ```js
> this.mutationObserver.observe(document.body, { attributes: true, childList: true, subtree: true });
> ```
>
> This causes a bunch of `Forced reflow` because the Tooltip `updatePosition` is mutating the element `style` attribute and Passbolt `MutationObserver` callbacks are querying the whole DOM looking for form elements all in the same frame.
>
> Under the `scroll` event, all of the little spans are the `MutationObserver` -> `findAndSetAuthenticationFields`. With the Passbolt extension, scrolling is verrrrry crunchy and bad.
>
> ![](https://user-images.githubusercontent.com/558581/156144998-8cf7686f-3c7b-42f8-8d81-ff780bae0ab5.png)
>
>
> #### Workaround
>
> Instead of running Passbolt on all sites, we can enable the extension to only run on the domain for Passbolt instance itself. I'm guessing the Passbolt extension also does autofill stuff on sites but I always login manually to the Passbolt instance so this solution works for me �
>
> **Extensions** -> **Passbolt** -> **Details** -> Change **Site access** to `On specific sites` -> Enter in your Passbolt instance `https://passbolt.example.com/`
>
> ![](https://user-images.githubusercontent.com/558581/156275630-a53ef6a1-c058-4ac9-aa08-ae50b90e72c9.png)
>
> *-- https://github.com/vector-im/element-web/issues/21262*
* Fix edge case in context menu chevron positioning
Signed-off-by: Robin Townsend <robin@robin.town>
* Expand context menu positioning regression tests
Signed-off-by: Robin Townsend <robin@robin.town>
* Try harder to keep context menus inside the window
Signed-off-by: Robin Townsend <robin@robin.town>
* Use UIStore for window dimensions
Signed-off-by: Robin Townsend <robin@robin.town>
* Test ContextMenu positioning
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't pillify code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pills do not appear in code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Use snapshot instead for test
Signed-off-by: Robin Townsend <robin@robin.town>
* react-focus-lock to 2.5.1
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use enzyme in ASSD test so focus lock finds active element
Signed-off-by: Kerry Archibald <kerrya@element.io>
* findById and flushPromises to test utils
Signed-off-by: Kerry Archibald <kerrya@element.io>
* unit test main paths in UserInfo component
Signed-off-by: Kerry Archibald <kerrya@element.io>
* one more test case
Signed-off-by: Kerry Archibald <kerrya@element.io>
* remove BasicUserInfo export
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Render a CollapsibleButton's children (needed by UploadButton)
* Make UploadButton ready to live inside an overflow menu
* Always show overflow menu in composer: main buttons are emoji and attach
* Re-order composer buttons as per design
* Re-word composer button captions to be simple nouns
* Don't rotate More options button when clicked
* Move the composer menu and dialogs 16px in from right
* Reduce shadow on composer More menu
* From review: remove else clause
* From review: take input out of button
* Update test snapshots
* Update snapshots
Co-authored-by: J. Ryan Stinnett <jryans@gmail.com>
Co-authored-by: Dariusz Niemczyk <dariuszn@element.io>
Co-authored-by: Timo K <toger5@hotmail.de>
With this pr all href use matrix matrix.to links. As a consequence right-click copy link will always return get you a sharable matrix.to link.
Previously, the `left` positioning seemed to only work with icons which are all about the same size so the arbitrary offset worked. Now we actually position off to the left of the element and we have equal `margin-left` and `margin-right` to determine the offset.
Spawned from https://github.com/matrix-org/matrix-react-sdk/pull/7339#discussion_r767154349
* Move all polls processing to events-sdk
This makes polls support the full range of extensible events (both parsing and generation).
* Appease the linter
* Fix & update tests
* Update events-sdk for polls bugfix
* Update events-sdk for typechecking
* Add missing type cast
* Update per review
* add disabler elative dates setting
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test existing DateSeparator
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use full date format when TimelineDisableRelativeDates is truthy
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add comment
Signed-off-by: Kerry Archibald <kerrya@element.io>
* flip timelineDisableRelativeDates -> timelineEnableRelativeDates to fit convention
Signed-off-by: Kerry Archibald <kerrya@element.io>
* mock date constructor in test
Signed-off-by: Kerry Archibald <kerrya@element.io>
Add a "kind" param for StyledCheckbox, allowing designers to choose different styles of checkbox as needed. In addition to the preexisting default kind (now called Solid), there's an Outline kind with a green checkmark and a transparent fill. This is used in the device trust view, since the default checkbox style looks too much like the green "verified" shield and it's awkward to have those next to each other.
* Improve visibility of font size chooser
* Move slider dot sizes into variables
* Use a standard font size instead of percentage in Slider
* Use shorthand for padding in FontScalingPanel
* Change Slider text pos to px to be consistent when font changes
* Cleaner dot size for Slider selection
Implement https://github.com/vector-im/element-web/issues/18957 following requirements:
* Create a new right panel view to list all the threads in a given room.
* Change ThreadView previous phase to be ThreadPanel rather than RoomSummary
* Implement local filters for My and All threads
In addition:
* Create a new TileShape for proper rendering requirements (hiding typing indicator)
* Create new timelineRenderingType for proper rendering requirements
* Fix infinite rerender loop when editing message
* Refactor "edit_event" to Action.EditEvent
* Make up-arrow edit working in Threads
* Properly handle timeline events edit state
* Properly traverse messages to be edited
* Add MatrixClientContextHOC
* Refactor RoomContext to use AppRenderingContext
* Typescriptify test
Co-authored-by: Germain <germains@element.io>