- Add @designer Copilot agent with Figma URL parsing and MCP/CLI fallback
- Make fileKey optional on all Figma MCP tools (extract from pasted URLs)
- Add CLI fallback scripts (figma-file, figma-node, figma-components)
- Add run-element-web.mjs launcher and start:element-web script
- Update devcontainer to Node 24 image, forward port 8080 for Element Web
- Simplify setup guide (no FIGMA_FILE secret, 3-step onboarding)
- Update docs with Element Web prototyping instructions
* refactoring and creation of shared-components for reductedBodyView
* move redacted message rendering to shared MVVM view
* Update snapshots + fix lint errors
* Remove MatrixClientPeg and use reguler react matrix client context
* Stop resyncing redacted body view models with mxEvent
* Fix redacted_because test fixtures for stricter event typing
* Simplify redacted body client access
* Watch timestamp setting in redacted body view model
* Refactor redacted and decryption failure body factories into MBodyFactory
* Prettier Fix
* Refactor FileBody into same pattern for consitancy
* Add `react-resizable-panels` library
* Implement a custom SeparatorView
* Add a `LeftResizablePanelView`
* Add a custom `GroupView`
* Export everything from shared-components
* Make it possible to track width/collapse state through settings
* Add a view model to drive the views
* Render views without disrupting the old room list
* Fix lint error
* Disable user interaction on collapsed panel
* Prevent widgets fron hijacking pointer events
* Expand to full width on separator click
* Separator should be shown when focused via keyboard
* Update tests
* Use data-attribute for hover
* Write stories for SeperatorView
* Write vite tests for SeparatorView
* Write tests for LeftResizablePanelView
* More tests
* Fix lint errors
* Fix flakey border on the roomlst
* Fix storybook axe violation
* Update snapshots
* Fix playwright tests
* Fix sonarcloud issues
* Use translated string
* Add better js-doc comments
* Rename `ResizerSnapshot` to `ResizerViewSnapshot`
* Externalize react-resizable-panels
* Link figma designs to stories
* Write playwright tests
* Update screenshots
* Fix lint errors
* Update more screenshots
* Update more screenshots
* Fix flaky toast test
* Update apps/web/playwright/e2e/crypto/toasts.spec.ts
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Fix indentation
---------
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Update dependency vite to v8
* Update vitest.config.ts
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Vite 8 migration
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 missing export in globals:
No name was provided for external module "@vector-im/compound-web" in
"output.globals" – guessing "compoundWeb".
No name was provided for external module "react-virtuoso" in
"output.globals" – guessing "reactVirtuoso".
* chore: rename snapshot, actions and vm according to MVVM doc
* doc: add naming conventions
* chore: fix UrlGroupView naming, folders and children
* chore: remove `Example` column
* refactor: rename `UrlPreviewGroupViewPreview` into `UrlPreview`
* feat: add section header
* refactor: remove index and role related to list box from RoomListItemView
* feat: add wrapper to RoomListItemView to handle different accessiblity pattern
* feat: add section support to VirtualizedRoomListView
* feat: add sections support to RoomListView
* test: add screenshot for sections header
* test: add/update screenshots for sections
* feat: force flat list on view model
This is an intermediary step before implementing sections in the vm. We
force the flat list but we use the underneath the view supporting
sections.
* test: update RoomListViewModel test
* test: fix breaking test
* chore: rename `getSectionViewModel` to `getSectionHeaderViewModel`
* chore: add missing `RoomListItemAccessibilityWrapper` export
* chore: merge `react` imports
* chore: simplify and add comment to `getItemKey` and `getHeaderKey`
* chore add comments to `getItemComponent` variants
* chore: fix typo in example doc
* Port over linkifyJS to shared-components.
* Drop rubbish
* update lock
* quickfix test
* drop group id
* Modernize tests
* Remove stories that aren't in use.
* Complete working version
* Add copyright
* tidy up
* update lock
* Update snaps
* update snap
* undo change
* remove unused
* More test updates
* fix typo
* fix margin on preview
* move margin block
* snapupdate
* prettier
* Port url preview logic to a view model.
* More fiddling with VM logic
* Note to self
* Refactor away into a shared component.
* Even more lovely lovely code that makes it look prettier
* translation cleanup
* Even more stuff that I need to fix yay
* Remove .last-run.json
* Update snaps
* Ensure we set showUrlPreview
* Cleanup tests
* lint + add png support
* Add a label
* Cleanup
* Add snaps
* Update snaps
* update playwright
* Refactors
* update snap
* Add missing snap
* Remove editing code (we check this in a better way in componentDidUpdate)
* Add README
* fix the one unused import
* Style shuffling
* Update vis tests
* Finally fix the tooltip
* Remove unused prop
* Add some padding
* fix lint issue
* Design improvements
* new screens
* Update snaps
* Fix CSS specificity
* Remove stale screenshot
* Rename function to match reality
* Port viewmodel tests to snapshots
* finish documenting types
* Stop being dangerous
* Use Linkify+decode for description
* Remove ability for VM to do linkifying.
* Port over linkifyJS to shared-components.
* Drop rubbish
* update lock
* quickfix test
* drop group id
* Modernize tests
* Remove stories that aren't in use.
* Complete working version
* Add copyright
* tidy up
* update lock
* Update snaps
* update snap
* undo change
* remove unused
* More test updates
* fix typo
* fix margin on preview
* move margin block
* snapupdate
* prettier
* cleanup a test mistake
* Fixup sonar issues
* Don't expose linkifyjs to applications, just provide helper functions.
* Add story for documentation.
* remove $
* Use a const
* typo
* cleanup var name
* remove console line
* Changes checkpoint
* Convert to context
* Revert unrelated change.
* more cleanup
* Add a test to cover ignoring incoming data elements
* Make tests happy
* Update tests for LinkedText
* Underlines!
* fix lock
* remove unused linkify packages
* import move
* Remove mod to remove underline
* undo
* fix snap
* another snapshot fix
* More cleanup
* Tidy up based on review.
* fix story
* Pass in args
* update snap
* cleanup
* use source image
* oops
* remove client peg
* Remove unused state
* tidy up code
* Ensure we update the preview when the event content may have changed.
* s/global/globalThis/
* Ensure we don't stretch images
* Update screenshots
* Cleanup
* Refactor MFileBody using MVVM and move to shared component
* Simplyfing rendering properties
* Create a first version of view model for the component
* Simplifying component properties and make it possible to override module css using data-* attributes
* Create a MBodyFactory in element-web and use it to render MFileBodyView from MessageEvent
* Use <MediaBody instead of <button to support legacy rendering
* Updated styling and comments
* Refactoring className from snapshot to component property
* Rename MFileBody* to FileBody*
* Rename MFileBody* to FileBody*
* Refactoring render branches to allow for displaying nothing
* Fix styling issues
* Fix lint errors
* Fix for css selectors in playwright tests
* Remove the MFileBody component and change all callers to use MBodyFactory:FileBodyView
* Remove unused strings in element-web
* Revert to render text in story iframes
* Fix for prettier error
* Fix playwright test css selectors
* Apply legacy styling in element-web
* Add legacy styling for mx_MFileBody
* Restore file
* Change from <div to <button
* Calculate span width ad update screenshots
* Remove width calculation and update snapshots
* Fix for letter-spacing and better content in story
* Updated playwright screenshots
* Updated snapshots
* Fixing Sonar errors/warnings
* Removed extra parentheses
* Changes after review
* Change border-radius to px and updated snapshots
* Fix typo in description
* And another typo fix
* Changes after review
* refactor: extract most of the logic from the virtualized list
The VirtualizedList component is renamed FlatVirtualizedList and most of
the logic is extracted. In order to prepare the introduction of the
GroupedVirtualizedList which will share most of the behaviour.
* refactor: use `FlatVirtualizedList` instead of `VirtualizedList`
* feat: add grouped virtualized list to shared components
* feat: add accessiblity helps for virtualized list
* test: use one test suite for the two virtualized lists
* test: update storybook screenshots
* feat: add keyboard navigation on header
* test: make a11y test pass
* chore: delete old screenshot
* doc: a11y docs to list stories
* chore: fix copyright
* Port over linkifyJS to shared-components.
* Drop rubbish
* update lock
* quickfix test
* drop group id
* Modernize tests
* Remove stories that aren't in use.
* Complete working version
* Add copyright
* tidy up
* update lock
* Update snaps
* update snap
* undo change
* remove unused
* More test updates
* fix typo
* fix margin on preview
* move margin block
* snapupdate
* prettier
* cleanup a test mistake
* Fixup sonar issues
* Don't expose linkifyjs to applications, just provide helper functions.
* Add story for documentation.
* remove $
* Use a const
* typo
* cleanup var name
* remove console line
* Changes checkpoint
* Convert to context
* Revert unrelated change.
* more cleanup
* Add a test to cover ignoring incoming data elements
* Make tests happy
* Update tests for LinkedText
* Underlines!
* fix lock
* remove unused linkify packages
* import move
* Remove mod to remove underline
* undo
* fix snap
* another snapshot fix
* Tidy up based on review.
* fix story
* Pass in args
* refactor: move pinned message badge into shared-components
* Update lint errors
* Fix for Vitest issue with CI on shared components
* Update related to the pr comments and requests
* Prettier Fix
* Update, remove view since it was just moved and not actually MVVMed
* Removed view suffix since it was only moved and not mvvmed
* Update snapshots
* Removal of unused screenshots
* Added Image that we need
* [create-pull-request] automated change
* Use a dedicated string for public access in settings.
* Fix tests due to copy changes.
* Fix tests due to copy changes.
* Fix tests due to copy changes.
* Fix tests due to copy changes.
* Fix tests due to copy changes.
* Updated visual tests screenshots due to copy changes.
* Updated visual tests screenshots due to copy changes.
---------
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
Co-authored-by: mxandreas <andreass@element.io>
* Refactor className? to component property in EncryptionEventView
* Refactor extraClassNames to default react className as component property for DecryptionFailureBodyView
* Refactor className to component property for MessageTimestampView
* Refactor className and children to component properties for ReactionsRowButton
* Refactor className to component property for DisambiguatedProfile
* Refactor className to a component property in DateSeparatorView
* Fix for lint errors and EncryptionEventView unsupported icon color
* EncryptionEventView fix for icon color css specificity/order
* perf(room list): clear room list item vm only when changing space
Clearing all the item vms at every room list change is causing massive
re-render of all the room list items. References to the vms are already
removed when out of view (see RoomListViewMode.updateVisibleRooms) and
handled by GC.
* perf(room list): avoid to re-render filters at every room list update
RoomListView re-renders on update but the filters (children) don't need
to.
Add a memo to avoid excessive-rerenders.
* chore: add `keepIfSame` to do diff on vm objects
* perf(room list): avoid to create new filter ids and keys when the room list is updated
The filterKeys are passed in the virtuoso context so it should reduce
internal computing
The filter ids array has always the same value, there is no point to
create a new instance.
* test(room list): remove no longer relevant test
* test(room list): add new test to ensure that room list item vms are preserved
* Init shared component structure
* Storybook implementation
* Add snapshots of storybook examples
* ViewModel Creation + Implementation In EventTile.tsx
* Prettier
* Update HTML snapshot
* Add onhover pointer on bottons
* Added compound web tooltip
* Removed possible of undefined on label
* Update snapshots
* Update setters to use merge instead of updating full snapshot
* adapt view model test for setters change
* Actions should be passed to viewmodel fix
* replace ReactionsRowWrapper forceRender with explicit reaction state
* Update snapshot
* Refactor DateSeparator using MVVM and move to shared-components
* Add a few more stories, tests and screenshots
* Use the shared component and viewmodel in element-web
* Renaming custom content property an updating snapshots
* Fix lint errors and update snapshot after merge
* Change lifecycle handling for DateSeparatoreViewModel in components where manual handling is preferrable over wrapper component.
* Move context menu from viewmodel to shared components - step 1
* Create a jump to date picker component in shared components
* Add tests for coverage and fix layout issues and roving indexes
* Make element-web use the new component
* Simplify context menu and adjusting tests
* The HTMLExport now render shared components and need a I18nContext.Provider
* Updating unit tests for context menu
* Changed to {translate: _t} to let scripts pick up translations
* Fix lint issue and updating screenshots after merge
* Update snaps for element web components
* Renaming MVVM view components with suffix View.
* Fixing problem with input date calendar icon and system dark theme
* Changed the rendering of the menu and added a separate button component
* Handle input control with useRef in onKeyDown
* Updating DateSeparator snapshots on unit tests
* Updating layout after compound Menu got a className property
* Move files to new subfolder after merge
* Updated snapshot after merge
* Updating lock file
* Updates to styling from PR review
* Updates to focus/blur functionality
* Fixed tabbing and export documentation to stories
* Updated snapshots
---------
Co-authored-by: Zack <zazi21@student.bth.se>
* Update critical gradient for room status bar
As per design request, this has been updated to be much more subtle
https://github.com/element-hq/compound-design-tokens/pull/232
* update shared-component
* Cleanup
* Update snaps
* description fix color
* More cleanup
* Use the correct border color
* new snaps
* fix border, button placement, fonts etc
* update lock
* Update status bar
* Update playwright snaps
* Update snap icon
* Update other banners
* update snap
* fixup
* fix: in room list item, replace bottom padding by top and bottom
Outline focus is not aligned when only using a padding bottom. Replace
by a padding-top and a padding-bottom.
The padding top is not added on the first item and the padding bottom
neither on the last item
* test: update snapshot
* test: update storybook screenshot
* test: update screenshot
* chore: use css var instead of duplicating the logic
* chore: add new stories for first and last item case
* test: add new screenshots following the new stories
* feat: add visual feedback of selection in `VirtualizedList` story
* fix: keyboard navigation when focused element is no longer in the dom
* fix: selection delay when the list is scrolled
* fix: room list item scroll issue
Avoid to use margin https://virtuoso.dev/react-virtuoso/#caveats
* test: add tests
* test(e2e): update snapshots
* test: update room list item screenshot
* Add Actions to ViewModel utility types and specify `this: void` signature
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add https://typescript-eslint.io/rules/unbound-method/ linter to shared-components
also fix stray lint config which doesn't apply to SC
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add https://typescript-eslint.io/rules/unbound-method/ linter to element-web
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix genuine issues identified by the linter
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Specify this:void on i18napi
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update Module API
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add comment for MapToVoidThis
Added utility type to map VM actions to unbound functions.
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>