Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Widgets: Refactor the inspector in Widgets Customizer to use core's controls #30431

Merged
merged 4 commits into from
Apr 8, 2021

Conversation

kevin940726
Copy link
Member

Description

Supersede #29755, close #30271.

I essentially rewrote the inspector by using core's controls section. Simplified the code a bit and moved most of the logics to controls. This also fixes the accessibility and UX issues of the previous attempt.

How has this been tested?

  1. Enable "Widgets blocks in Customizer" gutenberg experiment flag.
  2. Go to Customize -> Widgets.
  3. Inspect some blocks, it should open the inspector panel in a new section.
  4. The focus should be moved to the back button of the inspector section.
  5. Clicking on it or pressing Escape should close the inspector.
  6. Closing the inspector should smoothly transition back to the editor and return focus back to the selected block.
  7. It's possible to go to different widget areas and open their corresponding inspector panel.
  8. Scrolling in the inspector should trigger the sticky header (See the screen recordings for more details.)
  9. The inspector now has the correct title.

Screenshots

Kapture.2021-04-01.at.10.30.07.mp4

Types of changes

Bug fix

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@kevin940726 kevin940726 added [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Feature] Widgets Customizer Ability to add and edit blocks in Customize → Widgets. labels Apr 1, 2021
@github-actions
Copy link

github-actions bot commented Apr 1, 2021

Size Change: +715 B (0%)

Total Size: 1.42 MB

Filename Size Change
build/annotations/index.js 3.79 kB +3 B (0%)
build/api-fetch/index.js 3.41 kB -6 B (0%)
build/autop/index.js 2.81 kB +1 B (0%)
build/block-directory/index.js 8.63 kB -3 B (0%)
build/block-editor/index.js 127 kB +30 B (0%)
build/block-editor/style-rtl.css 12.4 kB +4 B (0%)
build/block-editor/style.css 12.4 kB +5 B (0%)
build/block-library/blocks/button/style-rtl.css 489 B -62 B (-11%) 👏
build/block-library/blocks/button/style.css 488 B -63 B (-11%) 👏
build/block-library/blocks/buttons/style-rtl.css 364 B -6 B (-2%)
build/block-library/blocks/buttons/style.css 363 B -7 B (-2%)
build/block-library/blocks/navigation-link/style-rtl.css 1.07 kB +117 B (+12%) ⚠️
build/block-library/blocks/navigation-link/style.css 1.07 kB +118 B (+12%) ⚠️
build/block-library/blocks/navigation/editor-rtl.css 1.16 kB +26 B (+2%)
build/block-library/blocks/navigation/editor.css 1.16 kB +25 B (+2%)
build/block-library/blocks/search/editor-rtl.css 189 B +24 B (+15%) ⚠️
build/block-library/blocks/search/editor.css 189 B +24 B (+15%) ⚠️
build/block-library/blocks/search/style-rtl.css 359 B +17 B (+5%) 🔍
build/block-library/blocks/search/style.css 362 B +18 B (+5%) 🔍
build/block-library/blocks/spacer/editor-rtl.css 308 B -9 B (-3%)
build/block-library/blocks/spacer/editor.css 308 B -9 B (-3%)
build/block-library/editor-rtl.css 9.55 kB +18 B (0%)
build/block-library/editor.css 9.54 kB +13 B (0%)
build/block-library/index.js 152 kB +334 B (0%)
build/block-library/reset-rtl.css 502 B -1 B (0%)
build/block-library/reset.css 503 B -1 B (0%)
build/block-library/style-rtl.css 9.37 kB +121 B (+1%)
build/block-library/style.css 9.37 kB +117 B (+1%)
build/blocks/index.js 48.4 kB -2 B (0%)
build/components/index.js 284 kB +19 B (0%)
build/compose/index.js 11.2 kB -2 B (0%)
build/core-data/index.js 17 kB +430 B (+3%)
build/customize-widgets/index.js 7.09 kB -164 B (-2%)
build/customize-widgets/style-rtl.css 630 B -46 B (-7%)
build/customize-widgets/style.css 631 B -46 B (-7%)
build/data/index.js 8.88 kB -5 B (0%)
build/date/index.js 31.9 kB +3 B (0%)
build/dom-ready/index.js 577 B +1 B (0%)
build/dom/index.js 5.17 kB +87 B (+2%)
build/edit-navigation/index.js 17 kB -299 B (-2%)
build/edit-post/index.js 306 kB +1 B (0%)
build/edit-post/style-rtl.css 6.91 kB -219 B (-3%)
build/edit-post/style.css 6.9 kB -221 B (-3%)
build/edit-site/index.js 28.1 kB +656 B (+2%)
build/edit-site/style-rtl.css 4.61 kB +31 B (+1%)
build/edit-site/style.css 4.61 kB +32 B (+1%)
build/edit-widgets/index.js 15.7 kB +65 B (0%)
build/editor/index.js 42.2 kB -509 B (-1%)
build/format-library/index.js 6.76 kB +1 B (0%)
build/hooks/index.js 2.28 kB +2 B (0%)
build/keyboard-shortcuts/index.js 2.53 kB -2 B (0%)
build/keycodes/index.js 1.96 kB +1 B (0%)
build/media-utils/index.js 5.38 kB +3 B (0%)
build/notices/index.js 1.86 kB +2 B (0%)
build/nux/index.js 3.42 kB -2 B (0%)
build/plugins/index.js 2.95 kB +1 B (0%)
build/primitives/index.js 1.42 kB +1 B (0%)
build/react-i18n/index.js 1.46 kB +1 B (0%)
build/reusable-blocks/index.js 3.79 kB -3 B (0%)
build/rich-text/index.js 13.5 kB +39 B (0%)
build/server-side-render/index.js 2.6 kB +10 B (0%)
build/token-list/index.js 1.27 kB -1 B (0%)
build/warning/index.js 1.14 kB +1 B (0%)
build/wordcount/index.js 1.22 kB +1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/blob/index.js 664 B 0 B
build/block-directory/style-rtl.css 1 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 436 B 0 B
build/block-library/blocks/columns/style.css 435 B 0 B
build/block-library/blocks/cover/editor-rtl.css 605 B 0 B
build/block-library/blocks/cover/editor.css 605 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.24 kB 0 B
build/block-library/blocks/cover/style.css 1.24 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 175 B 0 B
build/block-library/blocks/file/editor.css 174 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.11 kB 0 B
build/block-library/blocks/gallery/style.css 1.1 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 476 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 398 B 0 B
build/block-library/blocks/legacy-widget/editor.css 399 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 597 B 0 B
build/block-library/blocks/navigation-link/editor.css 597 B 0 B
build/block-library/blocks/navigation/style-rtl.css 204 B 0 B
build/block-library/blocks/navigation/style.css 205 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 170 B 0 B
build/block-library/blocks/page-list/editor.css 170 B 0 B
build/block-library/blocks/page-list/style-rtl.css 167 B 0 B
build/block-library/blocks/page-list/style.css 167 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 83 B 0 B
build/block-library/blocks/query-loop/editor.css 82 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 795 B 0 B
build/block-library/blocks/query/editor.css 794 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 776 B 0 B
build/block-library/blocks/social-links/editor.css 776 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 402 B 0 B
build/block-library/blocks/table/style.css 402 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 552 B 0 B
build/block-library/blocks/template-part/editor.css 551 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 50 B 0 B
build/block-library/blocks/verse/editor.css 50 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 187 B 0 B
build/block-library/blocks/video/style.css 187 B 0 B
build/block-library/common-rtl.css 1.31 kB 0 B
build/block-library/common.css 1.31 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.87 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.2 kB 0 B
build/data-controls/index.js 836 B 0 B
build/deprecated/index.js 787 B 0 B
build/edit-navigation/style-rtl.css 2.86 kB 0 B
build/edit-navigation/style.css 2.86 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-widgets/style-rtl.css 2.98 kB 0 B
build/edit-widgets/style.css 2.98 kB 0 B
build/editor/style-rtl.css 3.96 kB 0 B
build/editor/style.css 3.96 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 4.02 kB 0 B
build/is-shallow-equal/index.js 699 B 0 B
build/list-reusable-blocks/index.js 3.19 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/priority-queue/index.js 791 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/shortcode/index.js 1.7 kB 0 B
build/url/index.js 3.02 kB 0 B
build/viewport/index.js 1.86 kB 0 B

compressed-size-action

@kevin940726 kevin940726 force-pushed the fix/customize-widgets-inspector-a11y branch from a41c92e to cf187c4 Compare April 1, 2021 03:37
Comment on lines +74 to +76
// This is a temporary hack to prevent button component inside <BlockInspector>
// from submitting form when type="button" is not specified.
<form onSubmit={ ( event ) => event.preventDefault() }>
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I opened ItsJonQ/g2#298 to track this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That PR is merged now. Can we remove the hack?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not yet being merged into trunk yet.

@kevin940726 kevin940726 marked this pull request as ready for review April 1, 2021 04:17
@kevin940726 kevin940726 requested a review from noisysocks April 1, 2021 04:17
@kevin940726 kevin940726 mentioned this pull request Apr 1, 2021
53 tasks
@noisysocks
Copy link
Member

I like this approach better 🙂

@noisysocks
Copy link
Member

I noticed two bugs:

  • The slide out inserter's header looks all garbled.

    Screen Shot 2021-04-07 at 10 23 06
  • If I open an inspector, go back two levels, then click on Widgets, the transition is sluggish / weird. I tried to screen record this but the screen recording software made the transition impossible to see.

@kevin940726
Copy link
Member Author

The slide out inserter's header looks all garbled.

This is an oversight, fixed in c81cbab.

the transition is sluggish / weird.

This is a bit weirder, it seems like it has something to do with React remounting the tree twice. Since currently I can't get 2+ block editors work nicely together at the same time on the page, I unmount the previous one whenever it's collapsed and remount it when expanded. I delay the mounting to after the transitioning to avoid the weird transitioning effect, also make it more responsive to user's interactions. If it's not solvable (rendering multiple block editors) at the time, then maybe we should consider adding some loading screen when transitioning 🤔.

@noisysocks
Copy link
Member

If it's not solvable (rendering multiple block editors) at the time

It should be possible. The idea of a @wordpress/block-editor is that it's embeddable. For example, a P2 blog has one block editor per Write comment form. Do you know what the problem is when two block editors are mounted on the same page? Perhaps we can isolate the problem by creating a minimal HTML page which has two block editors?

@kevin940726
Copy link
Member Author

a P2 blog has one block editor per Write comment form.

Oh I didn't know that!

Do you know what the problem is when two block editors are mounted on the same page? Perhaps we can isolate the problem by creating a minimal HTML page which has two block editors?

Yes we should be able to, but I think that's up to a different PR. The performance concern is crucial too. I would imagine mounting multiple fully-featured block editors has some serious performance impact, but I need to do some tests to make sure, maybe it's not that bad.

@noisysocks
Copy link
Member

If it's not solvable (rendering multiple block editors) at the time, then maybe we should consider adding some loading screen when transitioning 🤔.

Yeah, I see what you mean here. I am definitely not a fan of how the editor "pops in" now after the transition is complete. It makes the UI feel very unresponsive. If it is not feasible to mount the entire editor in the 16 ms that we have before the transition starts then we should try to mount only some of the block editor. Perhaps only the block editor's chrome but not the blocks.

But, yes, this can be done in a follow-up 🙂

@kevin940726 kevin940726 merged commit 3dc3322 into trunk Apr 8, 2021
@kevin940726 kevin940726 deleted the fix/customize-widgets-inspector-a11y branch April 8, 2021 05:35
@github-actions github-actions bot added this to the Gutenberg 10.5 milestone Apr 8, 2021
@priethor priethor changed the title Refactor the inspector in Widgets Customizer to use core's controls Widgets: Refactor the inspector in Widgets Customizer to use core's controls Apr 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Widgets Customizer Ability to add and edit blocks in Customize → Widgets. [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes).
Projects
None yet
Development

Successfully merging this pull request may close these issues.

The inspector in the widgets customizer should follow accessibility best practices
2 participants