* Move shared components to a packages/ directory
so they can be publish more sensibly
* Iterate towards split out shared-components module
* Move shared component source into src/ subdir
* Fix up imports
* Include shared components in babel-ing (again)
* Remove now unused dependencies
* Update import in storybook preview
* ...except of course they aren't unused
if we import the shared components by source
* Ignore shared components deps
* Add shared-components to i18n paths
and upgrade web-i18n to version that supports doing so
* Move storybook stuff to shared-components
* Seems we don't need this anymore...
* Remove unused deps
and remove storybook plugin from eslint
* Presumably working-directory is only valid on run steps
* Ignore dep & run prettier
* Prettier on knips.ts
* Hopefully run in right dir
* Remember how to software write
* Okay... how about THIS way?
* Oh right, they were git ignored. Sigh.
* Add concurrently
* Ignore in knip
* Better?
* Paaaaaaaackageeeeeeees
* More packages
* Move playwright snapshots
* Still need a custom snapshots dir
* Add eslint back
* Oh, now knip sees them
* Fix another import
* Don't lint shared-components with everything else
Okay, eslint & tsconfig are tied too closely for this to work and
running tsc on the shared components will need its deps installing
* Maybe lint shared components
please?
* Not quite
* Remove storybook again
Re-check if it does work without it
* Remove storybook eslint plugin
as we're not linting storybook here anymore
* Remove this too
* We do need it here though
* Fix jitsi widget popout
Unfortunately I don't think playwright or jest can write a test for
something successfully opening a new tab.
Fixes https://github.com/element-hq/element-desktop/issues/2527
* On second thoughts, this is probably overkill
* Clarify
* Add test
* Unused import
15f1291cbc was really close to making widgets just work again in React development mode following the upgrade to React 19, but I forgot to test one thing: that persistent widgets (such as Element Call) still reuse the same iframe across their entire lifecycle as expected. The solution is to not manually destroy the iframe when AppTile is being unmounted; even if it turns out that the widget isn't actually persistent, React will still destroy it automatically for us.
Since the upgrade to React 19, widget initialization (most notably affecting group calls) has been broken in development mode. This is because React now executes all callback refs twice, and the callback ref that receives the widget's iframe was not prepared to deal with that. I've fixed this by creating and attaching the iframe to the DOM in the callback ref, which allows us to properly couple its lifetime to that of the StopGapWidget. I've also added some insurance against strict mode-style races in StopGapWidget (doesn't hurt).
* Add support for allowDownloadingMedia
* Add tests.
* Allow downloading when no event is associated.
* fix lint
* Update module API
* Update lock file too
* force CI
* Ensure consistent download file name on download from ImageView
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Ensure consistent download file name on download from ImageView
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix up type for `finished` result of Modal
The `finished` promise can be called with an empty array, for example if the
dialog is closed by a background click. This was not correctly represented in
the typing. Fix that, and add some documentation while we're at it.
* Type fixes to onFinished callbacks from Modal
These can all be called with zero arguments, despite what the type annotations
may say, so mark them accordingly.
* Remove uses of Modal `onFinished` property
... because it is confusing.
Instead, use the `finished` promise returned by `createDialog`.
* Modal: remove support for now-unused `onFinished` prop
* StopGapWidgetDriver: use `await` instead of promise chaining
* Fix up unit tests
* Update react monorepo to v19
* Import JSX explicitly for React 19 compatibility
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update usages of refs for React 19 compatibility
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update react imports
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Avoid legacy contexts as much as possible
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Avoid deprecated React symbols
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Stash
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update usages of refs for React 19 compatibility
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>
* Switch pillify to use a html-react-parser approach rather than DOM muddling
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate react html parsing
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate react html parsing
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate html parsing
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Memoize the EventContentBody component
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate html parsing
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>
* Simplify
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Discard changes to src/Linkify.tsx
* Discard changes to src/components/views/messages/TextualBody.tsx
* Discard changes to src/settings/handlers/AbstractLocalStorageSettingsHandler.ts
* Iterate
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>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Prepare for React 19 upgrade
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove stale comment
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Add report room dialog button/dialog.
* Update copy
* fixup tests / lint
* Fix title in test.
* update snapshot
* Add unit tests for dialog
* lint
* First pass at adding a report room on invite.
* Use a single line input field for reason to avoid bumping the layout.
* Fixups
* Embed reason to make it clear on grouping
* Revert accidental commit
* lint
* Add some playwright tests.
* tweaks
* Make ignored users list more accessible.
* i18n
* Fix sliding sync test.
* Add unit test
* Even more unit tests.
* move test
* Update to match designs.
* remove console statements
* fix css
* tidy up
* improve comments
* fix css
* updates
* Embed Element Call into Element Web packages
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>
* Pass rageshakeSubmitUrl & posthogApiHost to EC widget
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve coverage
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>
* Improve coverage
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update snapshots
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Use @vector-im/element-call-embedded
* Only pass posthog params to EC if Analytics is enabled
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix test mock
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update EC params to match https://github.com/element-hq/element-call/pull/3089
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update to latest element-call package
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* yarn.lock
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update to element-call-embedded@ v0.9.0-rc.1
* Gate Sentry params behind analytics consent
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update to element-call-embedded v0.9.0-rc.4
* Update Element Call embedded to 0.9.0 release
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: Hugh Nimmo-Smith <hughns@element.io>
* Replace onHeightChanged with ResizeObserver
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch away from nesting React trees and mangling the DOM
By parsing HTML events and manipulating the AST before passing it to React
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Use MatrixClientContext in Pill now that we are in the main React tree
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add missing import
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Break import cycles
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>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Minimise
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>
* Docs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix labelling of avatar menu
* Make the integration manager toggle more clear.
* fix label
* lint
* Update snapshots.
* Refactor many cases of checkbox to use the new compound component.
* Remove non-checkbox related changes
* Reset some things
* Remove usages of mx_checkbox* styling.
* Use label locators for apperance tests.
* small linter tweaks
* lint
* update screenshot
* Test updates
* lint
* Realign checkboxes for device selection.
* Fixup QuickSettings styling
* remove comment
* lint
* flex comment
* remove unused label
* remove redundant classes
* add test for spaces
* lint
* Copyright
* fixup spaces test
* spaces lint
* Replace pin with compound pin.
* Realign icons
* Remove hack for colouring icons
* Adjust existing rooms component to correctly label room.
* Add test for adding an existing room to an existing space.
* Set deterministic sort order for rooms
* lint
* chore: update `@vector-im/compound-design-tokens` & `@vector-im/compound-web` to last version
* chore: use `error-solid` icon instead of `error`
* chore: update jest snapshot
* fix: `AccessibleButton` lint
* Fix tiny typo in existing code
* Create a hook that uses the right panel store
So that we track changes to the right panel phases
* Create a context that wraps the previous hook we created
We do this so that we can get by using a single event listener i.e we
only need to call `useCurrentPhase` in the provider as opposed to
calling it in each header icon.
* Create a hook that tells you if a panel is open or not
* Create component that wraps Icon
and adds a class name when the corresponding panel is open
* Style room header icons for when they are toggled
* Style face pile for toggle state
* Fix broken CI
* Give directory a better name
* Update year in license
* Use a stronger type
* Fix outstanding UX issues with replies/mentions/keyword notifs
* Use createRoot instead of deprecated ReactDOM.render
I foresee this change being made across the codebase shortly
and want to proactively prevent my PR from falling behind
* Clean up react root on unmount
* Remove addition of left-edge highlight on message mentions
It is clear that it would be best for me to address
this piece in a separate PR.
* Update call to ReactRootManager.render
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch to secure random strings
Because the js-sdk methods are changing and there's no reason for these
not to use the secure versions. The dedicated upper/lower functions were
*only* used in this one case, so this should do the exact same thing with
the one exported function.
Requires https://github.com/matrix-org/matrix-js-sdk/pull/4621 (merge both together)
* Change remaining instances of randomString
which I somehow entirely missed the first time.
* Fix import order
* Switch to React18 useId
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Enable react-compiler eslint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix an easy one
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Disable in tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix usage of useRef as memoization
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix mutation of external values in hooks
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make React compiler happy about some frankly non-issues
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix MapMock
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>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Revert MemberListViewModel.tsx changes and disable linter per line
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Make viewmodel compatible with react-compiler linter
- Remove searchQuery ref/state and instead pass this query to the
loadMember function.
- Now we no longer need a separate search function
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: R Midhun Suresh <hi@midhun.dev>
* Remove FTUE onboarding as it is incompatible with SSO/OIDC
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove stale screenshots
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* React to MatrixEvent sender/target sentinels being updated for rendering state events
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>
* React to sentinel changes in EventListSummary
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>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add commercial licence and update config files
* Update license in headers
* Revert "Update license in headers"
This reverts commit 7ed7949485.
* Update only spdx id
* Remove LicenseRef- from package.json
LicenseRef- no longer allowed in npm v3 package.json
This fixes the warning in the logs and failing build check.
* Harden Settings using mapped types
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix issues found during hardening
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>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove oidc native flow stale key
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Stash initial work to bring TSC from over 6 mins to under 1 minute
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Stabilise types
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix incorrect props to AccessibleButton
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Swap AccessibleButton element types to match the props they provide
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Changed my mind, remove spurious previously ignored props
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update snapshots
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve performance of RoomContext in RoomHeader
This allows a component to subscribe to only part of the RoomContext so they do not need to re-render on every single change
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Prettier
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add comment
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Handle authenticated media when downloading from ImageView
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>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>